2012-04-05 97 views
1

我想在JSP页面中有一个来自bean的默认值,但我无法获取expresion来提取值。我正在与工作的一个例子JSP是属性标签(struts2)的默认值

<%@ 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中,但此数据不存在(这样做是为了让我可以打印默认值)

回答

4

未针对OGNL评估媒体资源标记的默认参数。

所以,你可以使用Struts如果/ ELSEIF /其他标记(或JSTL等效):

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

OGNL在价值属性进行评估,因此三元节省了大量的空间:

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

值得注意的是...属性标记的value属性最初设置为动作类(在迭代器中它将成为您期望的),所以通常需要将value属性设置为默认值按预期工作,如果未提供,则标签输出与0123相同

0

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

s:property标记的documentation提到当value不存在时使用default。因此,请尝试删除value媒体资源,并且只有default="%{datafield}"

+0

第二件事情第一件它回来了与上面的%{dataField}的地方错误的价值,它回来了NO,这是我从我在书中读到的理解Struts2在行动是如果返回值的属性是NULL,那么struts将使用默认值(因为它上面只是没有评估它)现在看起来它正在被错误地评估(只有2个可能的值是YES和NO,并且getDataFeild函数只返回值没有处理它)所以现在的问题是你可以有一个值,为什么它有错误的值这一次 – mpop 2012-04-05 19:48:17

+1

返回值'值'不是'NULL',因为你正在为'价值'领域。至于错误的价值,你最好确保你的getter/setter中的所有东西都是正确的。 – Omnipresent 2012-04-05 19:52:20

+0

另一个问题,数据类型是否使用自定义转换的事实是否会影响默认工作方式? (因此,这两个值是YES和NO,但真正在对象中它只是布尔值)? – mpop 2012-04-05 20:08:11