我正在尝试从 form:select
中预先选择一些值标签。那么,让我们看一下下面的示例类:
public class Post
{
private boolean anonymize;
private boolean videoRequired;
/* getters, setters */
}
如您所见,有两个 boolean 字段。我在 JSP 中使用第一个,如下所示:
<label>Anonymize</label>
<form:select path="anonymize" id="anonymize" class="form-control">
<form:option value="true" label="Yes" selected="${ (post.anonymize) ? true : ''}" />
<form:option value="false" label="No" selected="${ (!post.anonymize) ? true : ''}" />
</form:select>
当我检查该元素时,结果如下(假设 anonymize
是 true
):
<select id="anonymize" name="anonymize" class="form-control">
<option selected="true" value="true">Yes</option>
<option value="false">No</option>
</select>
到目前为止一切顺利。
现在我对另一个 boolean 字段 videoRequired
执行完全相同的操作。首先是 JSP:
<label>Video required</label>
<form:select path="videoRequired" id="videoRequired" class="form-control">
<form:option value="true" label="Yes" selected="${ (post.videoRequired) ? true : '' }" />
<form:option value="false" label="No" selected="${ (!post.videoRequired) ? true : '' }" />
</form:select>
这会导致(再次假设 videoRequired
也是 true
):
<label>Video required</label>
<select id="videoRequired" name="videoRequired" class="form-control">
<option selected="true" value="true">Yes</option>
<option value="false" selected="selected">No</option>
</select>
看一下这一行:
<option value="false" selected="selected">No</option>
这怎么可能发生?我已经坚持了几个小时了,我什至尝试过 <c:choose>
标记,然后对 selected
进行硬编码属性 - 它给了我完全相同的奇怪结果。谁能解释一下我哪里出了问题?我正在绞尽脑汁,因为我在两个领域都做了同样的事情,但仍然一个有效,另一个无效。顺便说一句,当我查看 mysql 时,两个字段都已正确设置。
最佳答案
为了预先选择 form:select
元素,您可以在返回 View 的 Controller 方法中将相应的变量 anonymize
设置为 true。
@Controller
public String getForm(ModelMap model, Post post){
post.setVideoRequired(true);
return "view-name";
}
关于java - :option in form:select 形式的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40403341/