<html:checkbox>和<s:checkbox>表现不同</s:复选框> </html:复选框>

时间:2014-11-05 09:02:50

标签: jsp java-ee checkbox struts2 struts1

我正在从Struts1迁移复选框到Struts2。 所以我改变了Struts1的代码

<html:checkbox style="border:0px" property="eDir" disabled="true"/>

<s:checkbox theme="simple" style="border:0px" name="eDir" disabled="true"></s:checkbox>

但即使值为true

,我也不会选中复选框

以下是

的html脚本

Struts1 html:

<input type="checkbox" name="eDir2ColTrue" value="on" checked="checked" disabled="disabled" style="border:0px">

Struts2 html:

<input type="checkbox" name="eDir2ColTrue" value="true" disabled="disabled" id="eDir2ColTrue" style="border:0px">
<input type="hidden" id="__checkbox_eDir2ColTrue" name="__checkbox_eDir2ColTrue" value="true" disabled="disabled">

该字段是布尔值。我在动作类中将其值从模型对象中获取为true ..但仍然未经检查。

更新

我尝试了这个,但它没有编译

<s:checkbox theme="simple" style="border:0px" key="eDir" disabled="true" <s:if test='${eDir}' >checked="checked"</s:if>></s:checkbox>

UPDATE1:

我尝试了这个,但是没有检查属性,所以尽管它的值为真,但它没有被检查

<s:checkbox theme="simple" style="border:0px" key="eDir" disabled="true" value="%{#eDir}"></s:checkbox>

UPDATE2:

当我打印时,即<c:out value="${eDir}"></c:out>,我得到的值为true 但是我把它放在了value属性中,它仍然没有一个checked属性。

<s:checkbox theme="simple" style="border:0px" key="eDir" disabled="true" value="${eDir}"></s:checkbox>

1 个答案:

答案 0 :(得分:0)

Struts2 checkbox标记的行为与Struts1中的模拟标记不同。正如您所提到的,Struts2为一个复选框创建了两个输入字段 - 一个用于选中的值,另一个用于未选中的值。然后通过其中一个检查。默认的拦截器堆栈包括处理提交值的checkbox拦截器。如果您使用Struts2复选框并且想要使用字段值不是布尔值,那么您应该使用fieldValue属性。

<s:checkbox theme="simple" cssStyle="border:0px" name="eDir" disabled="true" fieldValue="on"/>