JSP 中的表单验证和提交后所选标签消失
Selected Tag dissapears after form validation and submition in JSP
我是 Spring 的初学者,我正在尝试修复我的应用程序中的一些小问题。我有一个表格来编辑用户个人资料。在此表单中,我有一个下拉列表,管理员用户可以在其中为正在编辑的用户设置 select 用户角色。当我要编辑用户页面时,表单中的所有数据都从数据库中填充。假设我有两个表单输入:input
with lastName 和 select
with user role。 select 元素包含数据库中存在的所有角色,但 selected 角色与用户实际分配的角色相匹配。
这是我表单的一部分 - 输入姓氏
<spring:bind path="lastName">
<div class="form-group">
<label for="lastName">Last name</label>
<form:input path="lastName" type="text" class="form-control ${status.error ? 'border border-danger' : ''}" id="lastName" />
<form:errors path="lastName" cssStyle="color: #ff0000;"/>
</div>
</spring:bind>
这是一个 select 元素:
<form:select path="roles" id="role" multiple="false">
<form:options items="${allRoles}" itemValue="id" itemLabel="role"/>
</form:select>
现在,当我想编辑 lastName 时,例如。保留空白字段,然后 spring 验证此字段并抛出错误。问题是之前在 select
元素中 selected 的角色现在未被 selected。
这是验证前的 HTML 页:
输入:
<div class="form-group ">
<label for="email" class="active">Email</label>
<input id="email" name="email" type="email" class="form-control" value="ola@test.com">
</div>
select:
<select id="role" name="roles"">
<option value="1">ADMIN</option>
<option value="2">USER</option>
<option value="3">STUDENT</option>
<option value="4" selected="selected">LECTURER</option>
</select>
清除姓氏字段并提交表单后:
输入:
<div class="form-group">
<label for="lastName" class="">Last name</label>
<input id="lastName" name="lastName" type="text" class="form-control border border-danger" value="">
<span id="lastName.errors" style="color: #ff0000;">This field is required.</span>
</div>
select:
<div class="form-group">
<label for="role">Role Id</label>
<select id="role" name="roles">
<option value="1">ADMIN</option>
<option value="2">USER</option>
<option value="3">STUDENT</option>
<option value="4">LECTURER</option>
</select>
</div>
如您所见,selected= "selected"
属性已从选项 4 中消失。如何防止这种情况发生?顺便提一句。我知道这个 Spring MVC selected value in form:selected after form validation error
但我的情况似乎行不通。
我在存档页面中找到了一些提示 here
现在 selected 属性不会从选项标签中删除。我不确定这是否是解决此问题的好方法,但它对我有用..
已修改 select:
<form:form method="post" modelAttribute="editForm">
<c:forEach items="${editForm.roles}" var="role">
<c:set var="userRoleId" value="${role.id}" scope="request"/>
</c:forEach>
<form:select path="roles" id="role" multiple="false">
<c:forEach var="tempRole" items="${allRoles}">
<option value="${tempRole.id}" <c:if test="${tempRole.id == userRoleId}">selected="selected"</c:if> value="${tempRole.id}">${tempRole.role}</option>
</c:forEach>
</form:select>
</form:form>
我是 Spring 的初学者,我正在尝试修复我的应用程序中的一些小问题。我有一个表格来编辑用户个人资料。在此表单中,我有一个下拉列表,管理员用户可以在其中为正在编辑的用户设置 select 用户角色。当我要编辑用户页面时,表单中的所有数据都从数据库中填充。假设我有两个表单输入:input
with lastName 和 select
with user role。 select 元素包含数据库中存在的所有角色,但 selected 角色与用户实际分配的角色相匹配。
这是我表单的一部分 - 输入姓氏
<spring:bind path="lastName">
<div class="form-group">
<label for="lastName">Last name</label>
<form:input path="lastName" type="text" class="form-control ${status.error ? 'border border-danger' : ''}" id="lastName" />
<form:errors path="lastName" cssStyle="color: #ff0000;"/>
</div>
</spring:bind>
这是一个 select 元素:
<form:select path="roles" id="role" multiple="false">
<form:options items="${allRoles}" itemValue="id" itemLabel="role"/>
</form:select>
现在,当我想编辑 lastName 时,例如。保留空白字段,然后 spring 验证此字段并抛出错误。问题是之前在 select
元素中 selected 的角色现在未被 selected。
这是验证前的 HTML 页:
输入:
<div class="form-group ">
<label for="email" class="active">Email</label>
<input id="email" name="email" type="email" class="form-control" value="ola@test.com">
</div>
select:
<select id="role" name="roles"">
<option value="1">ADMIN</option>
<option value="2">USER</option>
<option value="3">STUDENT</option>
<option value="4" selected="selected">LECTURER</option>
</select>
清除姓氏字段并提交表单后: 输入:
<div class="form-group">
<label for="lastName" class="">Last name</label>
<input id="lastName" name="lastName" type="text" class="form-control border border-danger" value="">
<span id="lastName.errors" style="color: #ff0000;">This field is required.</span>
</div>
select:
<div class="form-group">
<label for="role">Role Id</label>
<select id="role" name="roles">
<option value="1">ADMIN</option>
<option value="2">USER</option>
<option value="3">STUDENT</option>
<option value="4">LECTURER</option>
</select>
</div>
如您所见,selected= "selected"
属性已从选项 4 中消失。如何防止这种情况发生?顺便提一句。我知道这个 Spring MVC selected value in form:selected after form validation error
但我的情况似乎行不通。
我在存档页面中找到了一些提示 here
现在 selected 属性不会从选项标签中删除。我不确定这是否是解决此问题的好方法,但它对我有用..
已修改 select:
<form:form method="post" modelAttribute="editForm">
<c:forEach items="${editForm.roles}" var="role">
<c:set var="userRoleId" value="${role.id}" scope="request"/>
</c:forEach>
<form:select path="roles" id="role" multiple="false">
<c:forEach var="tempRole" items="${allRoles}">
<option value="${tempRole.id}" <c:if test="${tempRole.id == userRoleId}">selected="selected"</c:if> value="${tempRole.id}">${tempRole.role}</option>
</c:forEach>
</form:select>
</form:form>