属性标记的默认值(struts2)

时间:2012-04-05 19:20:00

标签: struts2

我正在尝试从JSP页面中的bean获取默认值,但我无法获取表达式来提取值。我正在使用的示例JSP将是

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
    <head>
        <title> Testing OGNL conversions </title>
    </head>
  <body>
       The data stored is
       <s:property value="dataField" /><br/>
       The property of thisdata is 
       <s:property value="thisdata" default="%{dataField}" /><br/>
       <s:property value="dataField" />
  </body>
</html>

我得到以下输出

The data stored is YES 
The property of thisdata is %{dataField} 
YES 

假设struts.xml和类是正确的(因为正在打印YES,正如预期的那样,它们应该是)我如何从dataField获取默认值(是的我知道愚蠢的名字,但是对于测试代码对我来说很有用)

dataField存在于bean中,但是这个数据不存在(这样做是为了让我可以获得打印的默认值)

2 个答案:

答案 0 :(得分:4)

不评估OGNL的属性标记的默认参数。

所以你可以使用struts if / elseif / else标签(或等效的JSTL):

    <s:if test="somevar1 == null">
        <s:property value="someVar2"/>
    </s:if>
    <s:else>
        <s:property value="someVar1"/>
    </s:else>

OGNL在value属性中进行评估,因此三元组可以节省大量空间:

<s:property value="somevar1 == null?someVar2:someVar1"/>

进一步说明......属性标记的value属性最初设置为动作类(在迭代器中它将是您所期望的),因此通常需要将value属性设置为默认值为按预期工作,如果未提供,则标记输出与<s:property/>

相同

答案 1 :(得分:0)

我一会儿做了Struts2,所以不完全确定但试试这个。

s:property代码的documentation提到default不存在时使用value。因此,请尝试删除value属性,然后只有default="%{datafield}"