0

Struts2 プロパティ タグを使用して JSP にプロパティを表示している POJO があります。

public Class message
{
    string messageText;
    string messageType;

    //getters and setters, here
}

Text: <s:property value="messageBean.messageText"/>
Type: <s:property value="messageBean.messageType"/>

オブジェクトは、ユーザー入力またはデータベースからの読み取りによって作成されます。「messageType」属性には、データベース内のルックアップ テーブルのキーとして使用される整数値のみが含まれます。

「タイプ」の値を選択すると、ユーザーは前のページでラジオを選択でき、各オプションは整数に対応します。値を表示しているときは、現在整数のみを表示しています。整数に対応するテキストを表示したいのですが、アクション クラスにキーと値のルックアップ メソッドを含めることでこれを実現し、コードを次のように変更します。

//in Action class
public String getTranslatedType()
{
    if (messageBean.getMessageType().equals("12"))
        return "Message for frequent callers.";

    if (messageBean.getMessageType().equals("17"))
        return "Message for first time callers.";
    //etc
}

Text: <s:property value="messageBean.messageText"/>
Type: <s:property value="translatedType"/>

これを行うより良い方法はありますか?

これはうまくいかないようです:

Type: <s:property value="Utility.getTranslatedText(messageBean.messageType)"/>

プロパティ タグ内から静的ユーティリティ メソッドを呼び出すための構文はありますか?

4

1 に答える 1

1

あなたが何を達成しようとしているのか正確にはわかりません。ValueStack(アクションプロパティへのアクセス元)からデータにアクセスする代わりに、静的呼び出しを使用するのはなぜですか?可能であれば静的呼び出しを避け、フレームワークの意図された設計に固執し、ValueStack/アクションからのデータにアクセスすることが本当に最善です。

ロジックをアクションから分離したいだけの場合は、メソッドを次のように変更できます。

public String getTranslatedType() {
   return Utility.getTranslatedText(getMessageBean().getMessageType());
}

または、翻訳されたテキストを動的にページに表示したいですか?もしそうなら、おそらくあなたは次のステップの線に沿った何かであなたの目標を達成するためにJavascriptとJSONを使うことができます:

  1. messageType整数(キーとして)とtranslatedText文字列(値として)を次の行に沿ってマップに配置します。messageTypeText.put(12, "Message for frequent callers.");

  2. 次のようなものを使用してこれをJSONに変換します(new JSONObject(messageTypeText)).toString();

  3. 次に、次のようないくつかの方法のいずれかによってこれをクライアントに公開します。var messageTypeText = <s:property value="messageTypeText"/>;

  4. javascriptメソッドをmessageTypeラジオボタンにバインドします。このボタンは、現在選択されているradio / messageTypeの値を使用してjavascriptマップ/配列からアクセスすることにより、翻訳されたテキストを表示します。このアプローチについて詳しく説明することもできますが、あなたが探しているものでなければ、時間を無駄にしたくありません。:)

于 2012-07-10T02:13:17.153 に答える