如何将参数从 JSP 传递到 Struts 2 操作

How to pass a parameter from JSP to Struts 2 action

提问人:Andrei G 提问时间:1/7/2012 最后编辑:Roman CAndrei G 更新时间:1/29/2022 访问量:30072

问:

我有一个应用程序,我想在每次按下该项目的按钮时将项目传递给操作。id

我的JSP:

<s:submit  value="addToCart" action="addToCart" type="submit">
<s:param name="id" value="%{#cpu.id}" />
</s:submit>

行动:

public class ProductsCPU extends BaseAction implements Preparable, SessionAware {
private static final long serialVersionUID = 2124421844550008773L;

private List colors = new ArrayList<>();
private List cpus;
private String id;

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

当我将 id 打印到控制台时,它具有值。问题是什么?null

javascript java jsp 参数 struts2

评论

0赞 Umesh Awasthi 1/7/2012
为什么不在隐藏字段中传递参数,例如<s:hidden name="id" value="%{#cpu.id}" />
0赞 Andrei G 1/7/2012
如果我使用隐藏标签传递参数,则 id 值由项目的所有 ID 组成,在我的情况下为 1,2。我希望它是 1 或 2。
0赞 Umesh Awasthi 1/7/2012
我要求做这样的事情<s:submit value="addToCart" action="addToCart" type="submit"> <s:hidden name="val1" value="1"></s:hidden> </s:submit>
0赞 Andrei G 1/7/2012
我做了。但最终 ID 包含所有项目 ID。这是我的提交:<s:submit value=“addToCart” action=“addToCart” type=“submit”> <s:hidden name=“id” value=“%{#cpu.id}” /> </s:submit>
0赞 Umesh Awasthi 1/7/2012
不明白你想通过你的评论说什么??

答:

1赞 coding_idiot 1/7/2012 #1

这应该做:

<s:url id="myurl" action="addToCart">
    <s:param name="id" value="%{#cpu.id}" />
</s:url>
<s:submit  value="addToCart" action="%{myurl}"/>
1赞 xrcwrn 8/11/2014 #2

您需要使用 form 元素。

<form action="passId>
    <s:hidden name="id" value="%{#cpu.id}" />
    <s:submit  value="addToCart" action="addToCart" type="submit"/>
</form>
1赞 Roman C 12/18/2016 #3

问题在于,您不能像在代码中使用 submit 标签正文中的 param 标签一样,使用 tag 对 <s:submit> 标签进行参数化。<s:param>

您也不想添加字段,因为您已将多个值提交到操作中。这是因为许多隐藏字段都以相同的名称呈现。在提交表单之前,您只能使用一个字段并更新其值。<hidden>

您可能使用了错误的标记将参数传递给操作。您可以使用锚标记并使用标记对其进行参数化。<s:param>

第二种方法是使用 JavaScript 修改属性。通过这种方式,您还可以使用标签。action<button>

不建议采用第三种方式,因为它需要使用多个表单,每个链接一个表单。这样,您可以直接向表单操作属性添加参数。

以下是上述选项的代码。

三合一:

<s:form name="myForm13" namespace="/" action="save?message=Hello param 3" theme="simple">
  <br/><s:a cssClass="btn btn-primary" action="test"><s:param name="message">Hello param 1</s:param>&nbsp;&nbsp;&nbsp;Go&nbsp;&nbsp;&nbsp;</s:a>
  <br/><s:a href="#" cssClass="btn btn-warning" onclick="myForm13.action='test?message=Hello param 2';myForm13.submit()">Submit</s:a>
  <br/><s:submit cssClass="btn btn-danger" action="test"/>    
</s:form>

评论

0赞 Roman C 1/3/2017
参数是 3 合 1 传递的,但还有另一个参数,您应该自己找到它。