You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过点击绑定Struts2 action的按钮获取表格对应商品id

问题原因

你无法获取商品ID是两点导致的:

  1. JSP页面点击跳转时没有把当前行对应的商品ID作为参数传给后台Action
  2. Action中没有定义对应接收商品ID的属性,Struts2参数拦截器无法自动注入参数值

第一步:修改JSP跳转链接,携带商品ID参数

你可以直接在请求地址后拼接productId参数,更规范的方式是用Struts2的<s:url>标签生成请求地址,避免编码问题:

<td>
    <!-- 生成带productId参数的请求地址 -->
    <s:url action="BuyProduct" var="buyUrl">
        <s:param name="productId" value="productId"/>
    </s:url>
    <a href="${buyUrl}">
        <button class="button">
            <i class="fa fa-fw fa-cart-plus"></i>
        </button>
    </a>
</td>

也可以直接拼接参数,写法如下:

<a href="BuyProduct.action?productId=<s:property value='productId'/>">
    <button class="button">
        <i class="fa fa-fw fa-cart-plus"></i>
    </button>
</a>

第二步:修改Action代码,添加接收参数的属性

首先在Action中新增productId成员变量,并生成对应的getter、setter方法,Struts2会自动将请求携带的productId值注入到该属性中:

public class BuyProduct extends ActionSupport implements SessionAware {
    // 原有属性不变,新增productId属性
    private Integer productId;
    // 生成getter
    public Integer getProductId() {
        return productId;
    }
    // 生成setter
    public void setProductId(Integer productId) {
        this.productId = productId;
    }

    // 原有其他方法不变
    public String execute() throws Exception {
        // 原有逻辑不变,这里的productId已经被自动赋值,可以直接使用
        Product product = productDAO.getProductById(productId);
        // 后续逻辑不变
    }
}

另外注意你原有Action里的笔误:private Product Product; 属性名首字母大写了,需要改成private Product product; 否则对应getter、setter会不生效。

可选优化方案

如果你不想单独加productId属性,也可以直接给Product对象的productId属性赋值,只需要把JSP里的参数名改成product.productId即可:

<s:param name="product.productId" value="productId"/>

这种写法不需要在Action中新增productId属性,查询时直接用product.getProductId()即可。


内容的提问来源于stack exchange,提问作者Jdvlp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:24:05