我的 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 文件的样子:
app-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"/>
时,DAOSelectController 类的 onSubmit 函数没有执行。字段,并且浏览器正在尝试加载 daoselect.jsp 文件。如果我删除这个隐藏字段,那么 onSubmit 函数就会正常执行。
为什么会发生这种情况?
最佳答案
问题是生成的 <input type=hidden>
元素位于 DOM 树中“意外”的位置;浏览器试图理解这一点,但最终将元素重新定位到表格之外,这将其置于表单之外。这使得对以下 <input type=submit>
的解释出现各种问题。 。弄清楚究竟发生了什么让一切进入该状态将会很棘手,而且并不值得,因为修复方法是移动 <form:hidden>
向上到 <form:checkbox>
旁边,位于 <tr>
内,并移动 <form:form>
在 table 之外。这会将元素放入此类元素的正确 DOM 上下文中,从而使浏览器不必费力去弄清楚事物的含义(并鼓励它正确理解……)
<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>
和<table>
元素;它避免了各种问题。
关于java - 添加隐藏字段时 Spring 表单不提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20826768/