次の2つの例を考えてみましょう:使用列挙型は、ページBeanを取得するために
<c:if test="${errorMessage!=null}">
Welcome <c:out value="${homePageBean.currentUserName}"/>
私はJSTL対応のJSP通信に春のコントローラの例を見て、私はプログラマがコントローラでモデルオブジェクト名をハードコーディングしていることに気づくと、 JSP内で同じ名前をハードコードします。私はこれを行うより良い方法を見つけようとしています。
私はモデルオブジェクトの名前が含まれている列挙型を作成しました。
public enum Bean {
ERROR_MESSAGE("errorMessage"),
LOGIN_PAGE_BEAN("loginPageBean"),
HOME_PAGE_BEAN("homePageBean");
private String beanId;
private Bean(String beanId) {
this.beanId=beanId;
}
public String getBeanId() {
return beanId;
}
}私のコントローラでそう
、代わりにオブジェクト名をハードコーディングするの、私は単純に次の操作を行います。
String errorMessage=failedAttempt?"login.invalidUserNameOrPassword":null;
model.put(Bean.ERROR_MESSAGE.getBeanId(), errorMessage);
しかし、私はしようとどのように関係なく、私はできるように見えることはできませんBean.ERROR_MESSAGE.getBeanId()
を使用して、JSP内でこの「豆」を取得します。
<c:out value="${errorMessage}" /> // works but uses hardcoded name
<c:out value="${Bean.ERROR_MESSAGE.getBeanId()}" /> // doesn't work
<c:out value="${<%=Bean.ERROR_MESSAGE.getBeanId()%>}" /> // doesn't compile
誰にも解決策がありますか?
私は '$ {Bean.ERROR_MESSAGEは}' '$ {にErrorMessage}'よりも良くどのように表示されません。どちらの場合も、JavaとJSPで同じハードコーディングされた参照があります。 – skaffman
さて、Beanの名前が変わる可能性があります。答えは、enumの名前をキーとしてmap notationを使用することですが、mehです。 「Beanの名前が変更される可能性があること –
は一つのことです。もう1つは、正しい名前が 'bean'を検索するために使用されていることを確認することです。これは、異なるプログラマがコンポーネントを操作していると仮定すると、より明確になります。しかし、私にとっては、私は両方をコントロールしており、純粋な原則の問題に過ぎません。コントローラーをjstlに結びつける方法がない場合は、そうしてください。私はむしろ尋ねると、暗闇の中に住んでいます。 :) – jacekn