【问题标题】:Struts2 won't map request param to Integer action fieldStruts2 不会将请求参数映射到整数操作字段
【发布时间】:2014-02-14 19:23:12
【问题描述】:

好吧,我在这里疯了。这应该是微不足道的事情,但我整天都坚持这一点。这是设置:

形成jsp:

<s:form action="update-po-numbers" method="GET">
        <h3>PO numbers</h3>

        <s:hidden name="programId"/>

        USD: <s:textfield name="poNumUSD.paramValue" />
        EUR: <s:textfield name="poNumEUR.paramValue" />

        <s:submit value="Update PO numbers" />
</s:form>

struts.xml:(使用默认的struts拦截器栈)

<action name="update-po-numbers" class="UpdatePONumbersAction">
        <result name="success">success.jsp</result>
</action>

UpdatePONumbersAction.java:

public class UpdatePONumbersAction extends BaseAction {

        private Integer                 programId;
        private InvoiceParameterVO      poNumUSD;
        private InvoiceParameterVO      poNumEUR;

        @Override
        public String execute () throws Exception {

                InvoiceManager.updatePoNums(programId, poNumUSD, poNumEUR);

                return Action.SUCCESS;
        }

        public Integer getProgramId () {
                return programId;
        }

        public void setProgramId ( Integer programId ) {
                this.programId = programId;
        }

        public InvoiceParameterVO getPoNumUSD () {
                return poNumUSD;
        }

        public void setPoNumUSD ( InvoiceParameterVO poNumUSD ) {
                this.poNumUSD = poNumUSD;
        }

        public InvoiceParameterVO getPoNumEUR () {
                return poNumEUR;
        }

        public void setPoNumEUR ( InvoiceParameterVO poNumEUR ) {
                this.poNumEUR = poNumEUR;
        }
}

表单之前已填充了值。我可以从 Chrome 开发工具中看到所有请求参数都按预期发送并且不为空。在动作内部,poNumUSD.paramValue 和 poNumEUR.paramValue(它们是字符串)设置得很好。但是,programId 被设置为 null。我可以通过以下方式获得programId“手动”作为字符串:

ServletActionContext.getRequest().getParam(paramName))

但我想要自动类型转换。我错过了什么?至少,任何关于如何调试它以追踪问题的帮助都会很棒。

【问题讨论】:

  • 调试建议:启用 struts 包的调试日志记录。制作一个简单的表单,只保留与问题相关的信息,即只有 programId 的表单
  • 找到了吗?出了什么问题?
  • 不:(我太生气了,我不得不在周末休息一下。我明天再试一次。
  • 您在开发工具中看到的programId 的价值是什么?
  • 填充action bean是params拦截器所做的,确保它在堆栈上。

标签: java struts2


【解决方案1】:

您没有在 form.jsp

中设置 programId 的值
<s:hidden name="programId" value="1" />

<s:hidden name="programId" value="%{programId}" />

<input type="hidden" id="programId" name="programId" value="<%=request.getParameter("programId")%>" />

【讨论】:

  • 您的 &lt;input type="hidden"... 块帮助我解决了另一个问题 - 谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多