繁体   English   中英

struts2 s:property标签:替代价值的更好方法吗?

[英]struts2 s:property tag: Better way to replace value?

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

是否有用于从property标签内调用静态实用程序方法的语法?

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

如果仅希望将逻辑与操作分开,则可以将方法更改为:

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

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

  1. 将您的messageType整数(作为键)和TranslationText字符串(作为值)沿着沿着messageTypeText.put(12, "Message for frequent callers.");行放置到映射中messageTypeText.put(12, "Message for frequent callers.");

  2. 使用(new JSONObject(messageTypeText)).toString(); 将其转换为JSON (new JSONObject(messageTypeText)).toString();

  3. 然后通过多种方法之一将此方法公开给客户端,例如var messageTypeText = <s:property value="messageTypeText"/>;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM