【发布时间】:2014-04-04 15:54:12
【问题描述】:
我正在使用一个较旧的 JSP 应用程序。 modalDialog 有一个自定义构建道场。 用户输入应用程序并将信息输入表单。 当需要添加新学生时,他们会进入一个模式对话框,他们可以在其中添加编辑从数据库填充的列表。 进行更改后,它们可以保存(在模式对话框关闭之前保存到数据库。)只要它们通过验证。
原始表单完成后,他们会提交表单以进行额外验证。 用户通过关闭模式对话框而不保存来绕过编辑学生页面上的验证。 我提取了更新的信息 (dojo.xhrGet) 并将其存储在隐藏元素中,以便可以在提交时验证更新/未更改的学生信息。
div 填充了隐藏的 html 输入元素,并且它们验证得很好。 除非用户在查看/添加/更改 modalDialog 页面中的信息之前点击提交,并且他们收到阻止提交的错误。 如果他们随后返回到无法提交的模式对话框,则在第一次提交失败后,复选框不会验证为 true 或在任一页面上选中。 我们可以在列表中添加/编辑学生,并为学生列表选择一个“必须签名”的最低要求。
我已经搜索了一段时间,但没有找到任何与我真正遇到的问题相同的问题。
堆栈溢出标题“使用 dojo.xhrGet 更新表单字段导致 dijit.checkbox 为只读”尝试更改为 dojo.place(),但这并没有改变任何内容。
我查看了复选框,因为这似乎是在捕捉验证错误。它们被选中,但它们被验证为假。 堆栈溢出标题“单击时我的复选框不会检查”
我发现另一个似乎类似的问题,没有代码示例我不确定如何继续更改我自己的代码。 堆栈溢出标题“Struts2 验证 - 验证失败时重新填充子项”
当提交验证失败时,它不会加载从 dojo.xhrGet 返回的 div 元素。表单验证布尔值失败。
我只在模态对话框中包含了与学生有关的验证部分:
<script type="text/javascript">
function validateForm()
{
//Other non-relevant validation for this page removed from example.
var errors = [];
var form = dojo.byId("studentForm");
<s:if test="work.isTeam">
var index = 0;
var hasStudent = false;
var hasPermission = false;
while (true)
{
if (!dojo.byId("student" + index + ".name"))
{
break;
}
else
{
hasStudent = true;
if (form.elements.namedItem("student" + index + ".mustSign").checked == "true")
{
hasPermission = true;
}
}
index++;
}
if (!hasStudent)
{
errors[errors.length]="At least 1 student is required.";
}
if (!hasPermission)
{
errors[errors.length]="At least 1 student must be able to sign.";
}
</s:if>
}
<script>
打开模态对话框的主表单脚本和提交时调用的 refreshStudents() 函数。
<td align="center">
<input type="button" name="Checkin" value="Complete" onclick="dojo.byId('completing').value='true'; refreshStudents(); validateForm();"/>
</td>
主页面的验证几乎相同。 唯一的区别是我们收集 must sign 的值,因为它是从 dojo.xhrGet 返回的文本元素
<script type="text/javascript">
function editStudents()
{
try
{
turnOffDojo();
var classId = dojo.byId("classId").value;
var url = "<s:url action='ShowStudents' namespace='/files' includeParams='none'/>?classId=" + classId;
openModalDialog("StudentsDialog", url, "students", 550, 300);
}
catch (Exception)
{
createDojoAlert("Edit students (error)", Exception);
}
}
function refreshStudents()
{
<s:if test="work.isTeam">
var loopTR = document.createElement("TR");
loopTR.innerHTML="Loading Data...";
dojo.byId("studentsDiv").innerHTML="";
dojo.byId("studentsDiv").appendChild(loopTR);
var classId = dojo.byId("classId").value;
var url = "<s:url action='LoadStudents' namespace='/files' includeParams='none'/>?classId=" + classId;
dojo.xhrGet({
preventCache: true,
url: url,
load: function(result)
{
try
{
loopTR.innerHTML="";
dojo.byId("studentsDiv").innerHTML= result;
}
catch (Exception)
{
createDojoAlert("Refresh students (catch block)","<li>Error: " + Exception + "</li>");
}
},
error: function(error)
{
createDojoAlert("Refresh students (dojo error)","<li>Error: " + error + "</li>");
}
});
</s:if >
}
<script>
【问题讨论】:
标签: javascript validation struts2 dojo modal-dialog