2012-01-06 5 views
1

次の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 

誰にも解決策がありますか?

+1

私は '$ {Bean.ERROR_MESSAGEは}' '$ {にErrorMessage}'よりも良くどのように表示されません。どちらの場合も、JavaとJSPで同じハードコーディングされた参照があります。 – skaffman

+0

さて、Beanの名前が変わる可能性があります。答えは、enumの名前をキーとしてmap notationを使用することですが、mehです。 「Beanの名前が変更される可能性があること –

+0

は一つのことです。もう1つは、正しい名前が 'bean'を検索するために使用されていることを確認することです。これは、異なるプログラマがコンポーネントを操作していると仮定すると、より明確になります。しかし、私にとっては、私は両方をコントロールしており、純粋な原則の問題に過ぎません。コントローラーをjstlに結びつける方法がない場合は、そうしてください。私はむしろ尋ねると、暗闇の中に住んでいます。 :) – jacekn

答えて

0

あなたはそれが、Stringハードコードされたクラス名、または任意の他も、二度同じ「識別子」を参照する必要があるとしています。コントローラに1回、ビューに1回。

あなたはより多くのプログラム・アプローチを取るしようとしているところ、私が見

、その理論はそれは良い考えですが、あなたはこれを実現するために、あなたのJSPでスクリプトレットを注入するに終わります。必要な場合を除き、これを避けることがベストプラクティスです。

私は「あなたのように(あなたのコントローラクラスで使用するためのいくつかの明確に定義された定数をお勧めします(ので、あなたはすべてのJavaコードの上にStringsをハードコーディングしていない)とJSPで名前によってそれらString Sを参照するに固執するだろう現在行っている)。これは、MVCアプリケーションの大部分で使用される一般的なアプローチです。

+0

ボー、あなたの貢献に感謝します。スクリプトレットはコード作成のための良い方法ではありません。定数に関しては、有効な値が使用されることを保証する上で少しの利点を持つ列挙型のenumとほとんど同じです。私はあなたの答えを「あなたはすでにやることができる最高のことをやっている」と理解しています。 – jacekn

関連する問題