1

我试图让一个默认值来自 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 中,但 thisdata 不存在(这样做是为了获得要打印的默认值)

4

2 回答 2

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 属性最初设置为 action 类(在迭代器中,这将是您所期望的),因此通常需要设置 value 属性以使默认值按预期工作,如果未提供,则标签输出与<s:property/>

于 2012-04-05T21:16:03.093 回答
0

我前一段时间做过 Struts2,所以不完全确定,但试试这个。

标签的文档s:property提到了在不存在default时使用的内容。value因此,请尝试删除该value属性并拥有default="%{datafield}"

于 2012-04-05T19:33:06.423 回答