如何将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]
答案 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
。