添加隐藏字段时,不会提交Spring表单

时间:2013-12-29 15:31:05

标签: java spring jsp java-ee servlets

我在jsp文件中有以下表单:

form.jsp

<table>
<form:form modelAttribute="command" action="daoselect.app">
    <tr>
        <td>Store this data</td>
        <td><form:checkbox path="query"/>
    </tr>
    <form:hidden path="list"/>
    <tr>
        <td colspan="2" align="right"><input type="submit" value="Submit" /></td>
    </tr>
</form:form>

这是我的app-servlet.xml文件的样子:

应用-servlet.xml中

<bean name="/daoselect.app" class="de.xx.DAOSelectController">
    <property name="commandClass" value="de.xx.DAOSelectCommand"/>

    <property name="xmlservice" ref="GuestBookDataXML"/>
</bean>

这是 DAOSelectCommand.java 文件的样子

public class DAOSelectCommand {

private boolean query = false;
private List<GuestBookData> list;

public List<GuestBookData> getList() {
    return list;
}

public void setList(List<GuestBookData> list) {
    this.list = list;
}

public boolean getQuery() {
    return query;
}

public void setQuery(boolean query) {
    this.query = query;
}

public DAOSelectCommand() {

}


/*This constructor is used before loading the jsp file to add the list data to the hidden field*/
public DAOSelectCommand(List<GuestBookData> t) {
    this.list = t;
}

我遇到的问题是,当我添加<form:hidden path="list"/>字段并且浏览器试图加载daoselect.jsp文件时,不会执行DAOSelectController类的onSubmit函数。如果我删除这个隐藏字段,则onSubmit函数正常执行。

为什么会这样?

1 个答案:

答案 0 :(得分:2)

问题是生成的<input type=hidden>元素位于DOM树中的“意外”位置;浏览器试图弄清楚这一点,但最终将元素重新定位到表外部,这将它放在表单之外。这会使以下<input type=submit>的解释出现各种问题。准确地确定将所有内容都放入该状态的过程将会非常棘手,并且实际上并不值得,因为修复方法是将<form:hidden> 向上移动到{{1}旁边},<form:checkbox> 中的,并将<tr> 移到表中。这将元素放在适当的DOM上下文中,用于那些类型的元素,阻止浏览器几乎不必努力弄清楚事物的意义(并鼓励它做对了......)

<form:form>

此外,始终关闭<form:form modelAttribute="command" action="daoselect.app"> <table> <tr> <td>Store this data</td> <td><form:checkbox path="query"/> <form:hidden path="list"/></td> </tr> <tr> <td colspan="2" align="right"><input type="submit" value="Submit" /></td> </tr> </table> </form:form> <td>元素;它避免了各种各样的问题。