我正在尝试从form:select
标记中预选一些值。那么,我们来看看下面的示例类:
public class Post
{
private boolean anonymize;
private boolean videoRequired;
/* getters, setters */
}
如您所见,有两个布尔字段。我正在使用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>
到目前为止一切顺利
现在我用我的其他布尔字段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时,两个字段都已正确设置。
答案 0 :(得分:1)
为了预先选择form:select
元素,您可以在返回视图的控制器方法中将相应的变量anonymize
设置为true。
@Controller
public String getForm(ModelMap model, Post post){
post.setVideoRequired(true);
return "view-name";
}