我似乎无法在我的网络应用中将正确的实体密钥发送到servlet。我正在使用javascript方法通过按钮提交带有数据的表单。 代码分为jstl代码:
<c:if test="${!empty MOFornecedorList}">
<div id="RightColumn">
<%-- Search Box --%>
<div class="searchform">
<form id="formsearch" name="formsearch" method="post" action="<c:url value='FProcurar'/>">
<span>
<input name="searchBox" class="editbox_search" id="editbox_search" size="80" maxlength="100" value="Pesquisa" type="text" />
</span>
<input name="btnsearch" class="button_search" value="Pesquisa" type="button"/>
</form>
<div class="clr"></div>
<h>Criterio de Pesquisa: </h>
<select name="Type">
<option value="1">ID</option>
<option value="2">Nome</option>
<option value="3">Email</option>
<option value="4">Fax</option>
<option value="5">Endereço</option>
</select>
</div>
<%-- END Search Box --%>
<div class="clr"></div>
<table id="ProductTable" class="detailsTable">
<tr class="header">
<th colspan="9" >Modificar Fornecedor</th>
</tr>
<tr class="tableHeading">
<td>ID</td>
<td>Nome</td>
<td>Endereço</td>
<td>Nº de Celular</td>
<td>Nº de Telefone</td>
<td>Email</td>
<td>Fax</td>
<td>Descrição</td>
<td></td>
</tr>
<c:forEach var="MOForn" items="${MOFornecedorList}" varStatus="iter">
<tr class="${'white'} tableRow">
<td>${MOForn.getFid()}</td>
<td>${MOForn.getFNome()}</td>
<td>${MOForn.getFEndereco()}</td>
<td>${MOForn.getFNCel()}</td>
<td>${MOForn.getFNTel()}</td>
<td>${MOForn.getFEmail()}</td>
<td>${MOForn.getFFax()}</td>
<td>${MOForn.getFDescricao()}</td>
<td>
<form action="<c:url value='FMOb'/>" method="post" name="FModifi">
<input type="hidden"
name="MOForn"
value="${MOForn.fid}">
<input type="button"
value="Modificar" onclick="ModF()">
</form>
</td>
</tr>
</c:forEach>
</table>
</div>
</c:if>
javascript方法
function ModF() {
jConfirm('Modificar o Fornecedor?', 'Confirmação', function(r) {
if (r == true) {
$("form[name='FModifi']").submit();
} else {
return false;
}
});
}
和控制器代码:
//Check if fornecedor as been selected
int Fid = Integer.parseInt(request.getParameter("MOForn"));
//Get fornecedor object and set it to variable
Forn = transManager.getEnt(Fid,"fornecedor");
request.setAttribute("Forn",Forn);
PagesInF="FModificar";
request.setAttribute("PagesInF", PagesInF);
userPath = "/Fornecedor";
现在,当我测试代码时,jstl将按升序读取项目MOFornecedorList中的5条记录,并在最后一列中创建一个按钮。
当按下按钮时,例如在第三个记录中,调用JavaScript方法Modf()并显示确认对话框。
当用户按下OK按钮时,提交表格FModifi。
然后servlet将收到打开页面FMOb的请求,其中将检索按下的按钮的隐藏输入并将其放入变量类型int中,并执行其他一些代码。
但表单提交的价值是错误的。例如:
1 - 按钮 - MOforn = 1
2 - 按钮 - MOforn = 2
3 - 按钮 - MOforn = 3(点击)
4 - 按钮 - MOforn = 4
5 - 按钮 - MOforn = 5
表单应发送值3,但发送值为5。
所以,如果有任何想法,请分享。
答案 0 :(得分:0)
您有多个同名的表单。你的JS函数没有提交调用它的表单,但是它在HTML DOM树中提交带有该名称的表单的最后一次出现。
您需要替换
<input type="button" value="Modificar" onclick="ModF()">
通过
<input type="button" value="Modificar" onclick="confirmSubmit(this.form)">
并按如下方式重写函数:
function confirmSubmit(form) {
jConfirm('Modificar o Fornecedor?', 'Confirmação', function(confirmed) {
if (confirmed) {
form.submit();
}
}
}
我还建议使用上面提到的更多自我记录变量和函数名称,以便您的代码在长期内更容易理解和维护(不仅适用于您自己,也适用于其他人,例如Stackoverflow.com,当您发布问题时,您希望找到答案的人...)