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

How to pass a parameter from JSP to Struts 2 action

本文关键字:Struts2 操作 JSP 参数      更新时间:2023-09-26

我有一个应用程序,每次按下项目的按钮时,我都想将项目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值。问题出在哪里?

这应该做:

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

您需要使用form元素。

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

问题是,不能像在代码中使用submit标记体中的param标记那样,用<s:param>标记来参数化<s:submit>标记。

您也不希望添加<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>