3

我正在为参数附加操作,但在我的 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")%>"

难道上面是语法问题?如果不是,那么我们如何将参数设置为带有操作的查询字符串?

4

3 回答 3

3

不应该使用 Scriptlet ( <%= %>)

而且,如果action是 Struts 标记的属性(如<s:form>),则不能使用 scriptlet,而应使用OGNL.

请参考这个问题:Struts 2 s:select tag dynamic id了解更多详情

于 2013-02-01T11:19:10.717 回答
2

假设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。因此,您不能在 action 属性中使用此 url。此属性应包含用于查找您的操作的纯操作名称。

“我们如何将参数设置为查询字符串?”

实际上我们是用<s:param标签来做的。例如,当使用超链接时

<s:a action="MyAction">
   <s:param name="id" value="%{id}"/>
   <s:param name="name" value="%{name}"/>
</s:a>

但是这种结构不适用于标签,除非您应用<s:form答案中描述的特殊语法,并且如果您在操作中这样做,您肯定希望获取这些参数

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.

于 2013-02-01T13:18:29.787 回答
0

就像@AndreaLigios 提到的那样,您应该使用 Struts2 指定的 EL,在此处查看文档

如果您正在使用<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>
于 2013-02-01T13:17:56.457 回答