我正在使用操作附加参数,但我在 Struts 2 页面上遇到异常。
PWC6212: equal symbol expected
下面是我要提交的带有附加参数代码的操作。
action="MyAction.action?id=<%=request.getParameter("id")%>&name=<%=request.getParameter("name")%>&age=<%=request.getParameter("age")%>&num=<%=request.getParameter("num")%>"
上面是语法问题吗?如果不是,那么我们如何将参数设置为具有操作的查询字符串?
您不应该使用Scriptlet (
<%= %>
)
并且,如果
action
是 Struts 标签的属性(如 <s:form>
),则您不能使用 scriptlet,您应该使用 OGNL
。
请参考这个问题:Struts 2 s:select tag动态id了解更多详情
假设
action
属性与 <form
标签一起使用。然后施工
<form name="MyAction.action" action="upload?id=<%=request.getParameter("id")%>&name=<%=request.getParameter("name")%>&age=<%=request.getParameter("age")%>&num=<%=request.getParameter("num")%>" method="POST">
应该适用于当前上下文。但在您的情况下,给出错误消息(使用
Exception Name: org.apache.jasper.JasperException: equal symbol expected
标记时会发生<s:form
。因此,您不能在操作属性中使用此网址。此属性应包含用于查找操作的纯操作名称。
“我们如何将参数设置为查询字符串?”
实际上我们是用
<s:param
标签来实现的。例如,使用超链接时
<s:a action="MyAction">
<s:param name="id" value="%{id}"/>
<s:param name="name" value="%{name}"/>
</s:a>
但是这种构造不适用于
<s:form
标签,除非您应用 this 答案中描述的特殊语法,并且如果您在操作中这样做,您肯定希望获取这些参数
String quesyString = request.getQueryString();
并且该字符串不应该为空。
但是,这种用例很少应用,如果您没有理由以这种方式获取参数,那么作为替代方案,您始终可以使用
<s:hidden
字段来包含参数的值。例如
<s:form action="MyAction" method="POST">
<s:hidden name="id" value="%{id}"/>
<s:hidden name="name" value="%{name}"/>
</s:form>
这些值作为参数传递,并在
params
拦截器工作后初始化操作属性。您还可以直接从请求中获取此参数,如下所示
Map<String, String[]> params = (Map<String, String[]>)request.getParameterMap();
但是,在您的行动中执行此操作的更方便的方法是实施
ParameterAware
。
就像@AndreaLigios提到的,你应该使用Struts2指定的EL,查看这里的Document。
如果您正在使用
<s:url/>
,请查看文档以获取更多信息。
您的代码应如下所示:
<s:url value="MyAction.action">
<s:param name="id" value="%{#parameters.id}" />
<s:param name="name" value="%{#parameters.name}" />
<s:param name="age" value="%{#parameters.age}" />
<s:param name="num" value="%{#parameters.num}" />
</s:url>