【问题标题】:struts2 s:property tag: Better way to replace value?struts2 s:property tag:替换值的更好方法?
【发布时间】:2012-07-10 10:13:17
【问题描述】:

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

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

【问题讨论】:

    标签: java jsp struts2


    【解决方案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. Convert this to JSON 使用类似(new JSONObject(messageTypeText)).toString();

    3. 然后通过var messageTypeText = &lt;s:property value="messageTypeText"/&gt;;等多种方式中的任何一种将其公开给客户端

    4. 将 javascript 方法绑定到 messageType 单选按钮,然后通过使用当前选择的 radio/messageType 的值从 javascript 映射/数组访问它来显示翻译的文本。我可以提供有关此方法的更多详细信息,但如果它不是您想要的,我不想浪费我的时间! :)

    【讨论】:

    • 最终,是的;我试图概括重用的逻辑,但不以使事情过于复杂为代价。您在上面描述的将 getTranslatedType 作为方法添加到 Acion 上,就是我在原型中所做的。我只是想尽可能以“struts-ish”的方式来做这一切。
    • 那么要成为“struts-ish”,要么将 getTranslatedType 方法放在你的动作上,要么实现 ModelDriven 接口并将方法放在你的模型上。将它放在模型上会完全将它与框架分开,这是一件好事,“struts-ish”。
    猜你喜欢
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多