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

问题描述 投票:0回答: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")%>"

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

java jsp parameters struts2 ognl
3个回答
3
投票

不应该使用Scriptlet (

<%= %>
)

并且,如果

action
是 Struts 标签的属性(如
<s:form>
),则您不能使用 scriptlet,您应该使用
OGNL

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


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
标签来实现的。例如,使用超链接时

<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


0
投票

就像@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>
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.