首页 > 趣闻 > 正文内容

为什么参数总传不到Action?三步自查法省3天调试时间

趣闻2025-05-27 12:14:48

(抓狂)每次提交表单都像在玩抽奖?明明JSP页面参数写得清清楚楚,Action里却总是收不到值?今天咱们就来破解这个让新手程序员集体秃头的魔咒!我敢说,看完这篇至少能帮你省下3天无头苍蝇式的debug时间。


第一关:你的参数名写对了吗?

上周公司新来的实习生小王,因为把userName写成username,对着报错页面怀疑人生了俩小时。??Action获取参数的第一铁律??:大小写必须完全一致!
举个活生生的例子:

jasp复制

<input type="text" name="Account"> 


<input type="text" name="account">

??特殊注意!?? 遇到对象嵌套时,层级关系就像俄罗斯套娃:

jsp复制

<input name="user.name"> 

要是你发现参数值死活传不过去,先把所有表单字段打印到控制台——在JSP里临时加个${param},比算命还灵验!


第二关:配置文件是不是在装死?

去年我参与的一个电商项目,因为漏写了一行配置,整个购物车功能直接瘫痪。??struts.xml这个幕后黑手??最擅长制造悬案:

  1. ??action路径映射检查??
xml复制

<action name="login" class="com.example.LoginAction">
  1. ??拦截器捣乱排查??
    突然发现原本能用的参数传不过去了?可能是新加的拦截器吞掉了参数,试试在配置里排除:
xml复制
<interceptor-ref name="params">
    <param name="excludeParams">secret.*param>
interceptor-ref>
  1. ??结果类型匹配度测试??
    当使用JSON插件返回数据时,记得配置结果类型:
xml复制
<result type="json">
    <param name="root">resultDataparam>
result>

有个冷知识:??超过50%的配置错误都发生在复制粘贴现有配置后忘记修改参数??(别问我怎么知道的)。


第三关:数据格式暗藏杀机

上个月帮朋友公司救火,发现他们传的日期参数总是变成null。原来JSP端传的是2023-08-15,而Action里用Date类型接收却没配转换器!??数据类型三大雷区??:

  1. ??日期格式对不上??
    解决方案:在Action里加个这样的转换方法:
java复制
public void setCreateTime(String timeStr) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    this.createTime = sdf.parse(timeStr);
}
  1. ??数字带特殊字符??
    前端传了个1,000,后端用Integer接收直接报错,记得先清洗数据:
jsp复制
name="amount" value="${fn:replace(amount, ',', '')}">
  1. ??布尔值陷阱??
    前端传"on"/"off",后端用boolean接收?得先转成"true"/"false":
jsp复制
name="isVip" fieldValue="true"/>

独门调试秘籍(一般人我不告诉)

最近统计项目组新人提交的bug,发现??70%的参数问题其实不用写代码就能解决??:

  1. ??浏览器开发者工具必杀技??
    按F12打开Network标签,查看请求参数是否真的成功发送
  2. ??在Action里加个万能打印??
java复制
public String execute() {
    System.out.println("收到参数:" + request.getParameterMap());
    return SUCCESS;
}
  1. ??备个参数快照工具??
    在web.xml配置监听器,自动记录所有请求参数:
xml复制
<listener>
    <listener-class>com.example.RequestDumperlistener-class>
listener>

去年双十一大促,正是靠这个方法10分钟定位了支付参数丢失的问题,直接避免百万损失!

(合上笔记本)说句掏心窝子的话:参数传递就像谈恋爱,??光你觉得对得上没用,得对方也认这个信号??。下次再遇到Action收不到参数,先把这三个关卡过一遍——我赌五毛钱,问题肯定藏在你看过三遍却视而不见的地方!

搜索