【问题标题】:Append a query string with action in Struts 2在 Struts 2 中附加一个带有操作的查询字符串
【发布时间】:2013-01-16 16:07:24
【问题描述】:

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

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

【问题讨论】:

  • 请发布您的整个用例,至少tag 的人无法通过您的 sn-p 理解您。
  • 基本上,我在查询字符串中附加了要提交的操作,但我的 struts2 页面显示异常“预期的等号”。
  • @Java_NewBie 使用 struts 标签。

标签: java jsp parameters struts2 ognl


【解决方案1】:

不应该使用 Scriptlet (&lt;%= %&gt;)

而且,如果 action 是 Struts 标记的属性(如 &lt;s:form&gt;),您不能使用 scriptlet,您应该使用 OGNL

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

【讨论】:

    【解决方案2】:

    就像@AndreaLigios 提到的,你应该使用Struts2 指定的EL,在这里查看Document

    如果您使用的是&lt;s:url/&gt;,请查看Document 以获取更多信息。

    您的代码应如下所示:

    <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>
    

    【讨论】:

      【解决方案3】:

      假设action 属性与&lt;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 是在使用&lt;s:form 标签时发生的。因此,您不能在操作属性中使用此 url。此属性应包含用于查找您的操作的纯操作名称。

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

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

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

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

      String quesyString = request.getQueryString();
      

      而且这个字符串不能为空。

      但是,这种用例很少应用,如果您没有理由以这种方式获取参数,那么作为替代方案,您始终可以使用 &lt;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

      【讨论】:

        猜你喜欢
        • 2014-07-10
        • 2014-02-28
        • 1970-01-01
        • 2011-06-28
        • 1970-01-01
        • 2018-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多