我在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函数正常执行。
为什么会这样?
答案 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>
元素;它避免了各种各样的问题。