struts2 s:属性标签:更换价值的更好方法?

时间:2012-07-10 00:56:55

标签: java jsp struts2

我有一个POJO,我使用Struts2属性标签在JSP上显示其属性:

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)"/>

是否有从属性标记中调用静态实用程序方法的语法?

1 个答案:

答案 0 :(得分:1)

我不确定你想要实现的目标。为什么您更喜欢使用静态调用而不是从ValueStack(访问操作属性的位置)访问数据?如果可能的话,最好避免静态调用,并坚持使用框架的预期设计并从ValueStack / action访问数据。

如果您只想将逻辑与动作分开,可以将方法更改为:

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

或者您是否希望动态地在页面上显示翻译文本?如果是这样,也许您可​​以使用Javascript和JSON来实现您的目标,其中包含以下步骤:

  1. 将您的messageType整数(作为键)和您的translatedText字符串(作为值)放入messageTypeText.put(12, "Message for frequent callers.");

  2. 行的地图中
  3. Convert this to JSON使用(new JSONObject(messageTypeText)).toString();

  4. 之类的内容
  5. 然后通过var messageTypeText = <s:property value="messageTypeText"/>;

  6. 等多种方式向客户展示
  7. 将javascript方法绑定到messageType单选按钮,然后通过使用当前所选radio / messageType的值从javascript地图/数组访问它来显示已翻译的文本。我可以提供更多关于这种方法的细节,但我不想浪费我的时间,如果它不是你想要的! :)