0

我有一个 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)"/>

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

4

1 回答 1

1

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

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

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

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

  1. 将您的 messageType 整数(作为键)和您的 translateText 字符串(作为值)放入沿线的地图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 回答