如何将JSP变量转换为Struts2变量?

时间:2013-11-27 02:13:40

标签: java jsp struts2 ognl valuestack

如何将JSP变量转换为Struts2变量?

我尝试了以下内容:

<%=scoredDocument%>
<s:push value="scoredDocument"/>
<s:push value="#scoredDocument"/>
<s:push value="%{scoredDocument}"/>
<s:push value="${scoredDocument}"/>
<s:push value="#page.scoredDocument"/>
<s:push value="%{#page.scoredDocument}"/>

<display:column title="Study Code" sortable="true">
    <s:property value="id"/>

最常见的错误是

  

引起:标记'push',字段'value':您必须指定一个值来推送堆栈。示例:person - [unknown location]

2 个答案:

答案 0 :(得分:1)

<s:push>必须包含<s:property>标记。还

<s:push value="#attr.scoredDocument">
    <display:column title="Study Code" sortable="true">
        <s:property value="id"/>
    </display:column>
</s:push>

#attr? WTF Struts?它甚至没有记录! https://struts.apache.org/release/2.0.x/docs/jsp.html

答案 1 :(得分:1)

push标记需要value属性,必须初始化,否则会显示JSP错误。与其他值可以使用空字符串预初始化的标记不同,JSP不会抱怨。

OGNL表达式在此属性中进行计算,与Struts标记的许多其他属性一样,如果无法解析该值,则返回null。此值对于push标记是不可接受的,并且会抛出异常。该错误误导了通过OGNL表达式进行不同尝试访问scriptlet变量值,遗憾的是,这些方法都不起作用。

当与Struts标记一起使用时,Scriptlet表达式有一个缺陷,您只能在标记的主体中使用它并将其转换为字符串。就像在这个例子中一样

<s:set var="scoredDocument"><%=scoredDocument%></s:set>

您不能对push标记执行相同的操作。之后,您可以在OGNL表达式中使用字符串化版本的#scoredDocument