选中基于模型变量的单选按钮 + Spring 表单 + JSP

Checked radion button based on model variable + Spring forms + JSP

我有一个名为 cuntry.java 的模型,变量为 lang。我想检查 JSP 中基于 lang 的单选按钮选项。它可以是 'EN' 或 'FR'。当我写下面的代码时,在 JSP 页面中抛出错误。

代码:

<form:radiobutton path="lang" id="language" value="FR" name="radios" <c:if ${cuntry.lang == 'FR' ? 'checked="checked"' : '' } /> ></form:radiobutton>

错误:Unterminated &lt;form:radiobutton tag

<c:if> 标签作用于标签而不是属性。结果,您的 html 语法变得无效。

我已经有一段时间 jsp 没做过了。这应该或多或少起作用:

<form:radiobutton checked="${cuntry.lang == 'FR' ? 'checked':''}" path="lang" id="language" value="FR" name="radios">
</form:radiobutton>  

如果你坚持使用<c:if>标签,你可以这样做:

<c:if test="${cuntry.lang == 'FR'}">
    <form:radiobutton checked="checked" path="lang" id="language" value="FR" name="radios">
    </form:radiobutton> 
</c:if>
<c:if test="${cuntry.lang != 'FR'}">
    <form:radiobutton path="lang" id="language" value="FR" name="radios">
    </form:radiobutton> 
</c:if>  

你也可以使用<c:choose>,<c:when>,<c:otherwise>标签来解决这个问题。

显然第一个解决方案看起来更好。

表单标记中存在多个错误。使用 Spring 标签时,您不能指定 idname 属性。它们将从 path 变量自动生成。不允许在另一个标签 <form:radiobutton ... /> 内使用标签 <c:if ... />。也删除结束标记。这才是正确的做法

<form:radiobutton path="lang" value="FR" checked="${cuntry.lang == 'FR' ? 'checked' : '' }" />

如果cuntry.lang的值为FR,则Spring标签的结果如下HTML(编译后)

<input id="lang" name="lang" checked="checked" type="radio" value="FR" />

否则

<input id="lang" name="lang" type="radio" value="FR" />

如果您绝对需要属性 id = languagename = radios,则不能使用 Spring 标签。

你会找到一个很好的例子here