我正在尝试从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中,但是这个数据不存在(这样做是为了让我可以获得打印的默认值)
答案 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}"