弹簧形式:在页面加载时选择一个的单选按钮

时间:2018-06-05 03:15:43

标签: java spring forms spring-mvc

<form:form method="post" action="/changeEnabledResource" modelAttribute="user">
    <c:forEach items="${user.resources}" var="resource">
        <form:radiobutton path="resources" 
                          value="${resource}" 
                          label="${resource.name}" 
                          checked="${resource.enabled ? 'checked' : ''}/>
    </c:forEach>
    <input type="submit" value="Submit"/>
</form>

资源类:

public class Resource {
    private Long id;
    private String name;
    private boolean enabled;

    //getters setters
}

用户类:

public class User {
    private List<Resource> resources;
    ....
    //rest of code
}

使用上面的代码所有形式:radiobuttons已检查=&#34;已检查&#34;,因此在表单加载时始终检查最后一个。提交工作正常,它将正确的一个更改为启用,其余部分未启用(服务类处理此操作)。但是当页面加载所有单选按钮时都检查了=&#34;已检查&#34;。

为什么会发生这种情况,或者这样做的正确方法是什么,以便IS启用的资源检查单选按钮?

2 个答案:

答案 0 :(得分:0)

答案是不要使用表格:radiobutton(s)标签,因为它们显然不能很好地工作。我还没有找到任何使用此标记的示例。我的解决方案只是使用纯HTML输入标签,并在控制器方法中使用@RequestParam,它只传递检查的单选按钮的值。我可以轻松使用$ {resource.enabled? &#39;检查&#39; :&#39;&#39;}以确保选择正确的。

答案 1 :(得分:0)

在单独的属性中设置所选值:

public class User {
    private int selectedResourceId;
    private List<Resource> resources;
    ....
    //rest of code
}


...
<form:radiobutton path="selectedResourceId" 
                  value="${resource.id}" 
                  label="${resource.name}"/>
...

在页面加载时,初始化selectedResourceId(基于resource enabled标记为true),以便form:radiobutton标记知道哪一个在呈现页面时选择。

提交表单后,转到另一个方向,根据resource.enabled设置相应的selectedResourceId标记。