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

Struts 2中JSP调用Action方法传参为null的问题排查

解决Struts2中调用Action方法传参为null的问题

问题场景

在JSP中尝试调用Action方法并传递参数,使用<s:param>传递动态值时参数为null,但传入字符串常量(如'Doe')时正常。

JSP代码:

<s:param name="lastname" value="outputData.Lastname"></s:param>
<li> Your fullname is: <s:property name = "fullname" value="%{getFullname(lastname)}"/> </li>

对应Action方法:

public String getFullname (String lastname) throws Exception {
     String firstname = someClass.getFirstname();
     return firstname + lastname;
}

解决方案

  • 检查outputData的可访问性:确保outputData对象存在于当前ValueStack中,并且Lastname属性有对应的getLastname()方法。OGNL表达式依赖getter方法读取属性值,若对象不存在或无合法getter,会返回null。
  • 移除无用的<s:param>标签:<s:param>用于配合<s:url>、<s:a>等标签传递请求/URL参数,并非为<s:property>的方法调用提供参数。直接在方法调用中通过OGNL引用目标值即可,修改后的JSP代码:
<li> Your fullname is: <s:property value="%{getFullname(outputData.Lastname)}"/> </li>
  • 确保Action中outputData的正确暴露:如果outputData是Action的成员变量,必须添加public的getter方法(如public OutputData getOutputData()),这样OGNL才能从ValueStack中获取该对象及其属性。
  • 区分参数传递的作用域:<s:param>是往请求参数集合中添加值,而<s:property>的value属性直接从ValueStack取值并执行方法,两者作用域不同,不要混用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:48:22