在Struts 2中附加带有操作的查询字符串

时间:2013-02-01 10:53:46

标签: java jsp parameters struts2 ognl

我在操作中追加参数,但是我的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")%>"

以上是语法问题吗?如果没有,那么我们如何将参数设置为带有动作的查询字符串?

3 个答案:

答案 0 :(得分:3)

应该不使用Scriptlets(<%= %>

而且,如果action是Struts标记的属性(例如<s:form>),那么不能使用scriptlet,您应该使用OGNL

请参阅此问题:Struts 2 s:select tag dynamic id了解详情

答案 1 :(得分: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标签时发生了<s:param。因此,您不能在action属性中使用此url。此属性应包含将用于的简单操作名称找到你的行动。

  

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

实际上我们使用<s:a action="MyAction"> <s:param name="id" value="%{id}"/> <s:param name="name" value="%{name}"/> </s:a> 标记。例如,使用超链接时

<s:form

但是这种结构不适用于String quesyString = request.getQueryString(); 标记,除非你应用this回答中描述的特殊语法,如果你在动作中你肯定想要获取这些参数

<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

但是,在您的操作中执行此操作的更方便的方法是实现{{1}}。

答案 2 :(得分:0)

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

如果您使用的是<s:url/>,请查看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>