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
相关产品推荐
相关产品推荐

