JSTLの答えが最適ですが、私の場合はJSTLのない古いJavaレガシーアプリケーションであり、紹介できませんでした。
これは、いくつかのレガシーStruts1.3コードで私が持っていた要件でした。「Y」、「N」、「」、またはnullのように、データベース呼び出しからのフォームBeanの値と一致するようにチェックボックスを設定します。
また、strutsロジックタグ内にとどまり、JSTLを使用しないようにする必要がありました。これは私の当初の好みでした。strutsのドキュメント
によると、チェックボックスはactionFormのブール変数と同等である必要があるとのことですが、文字列値を使用しました。これは機能しました。
上記のドキュメントリンクから:
注:このフィールドに関連付けられている基になるプロパティ値はブール型である必要があり、指定する値はすべて、真の値( "true"、 "yes"、または "on")を示す文字列の1つに対応している必要があります。関連する文字列値のセットを利用する場合は、マルチボックスタグの使用を検討してください。
文字列の値をフォームのブール値に変換することを考えていましたが、この方法で文字列を取得しました。
最後に、JavaScriptを使用してチェック済みのステータスを設定しました。これらはすべて冗長であり、最善の解決策ではありませんが、要件に直面しても機能します。
コードは次のとおりです。
<logic:equal name="<%=formName%>" property="formInd" value="Y">
<html:checkbox name="<%=formName%>" onchange="setDataChanged()" property="formInd"/>
<script type="text/javascript" LANGUAGE="JavaScript">
document.<%=formName%>.formInd.checked = true;
</script>
</logic:equal>
<logic:equal name="<%=formName%>" property="formInd" value="N">
<html:checkbox name="<%=formName%>" onchange="setDataChanged()" property="formInd"/>
<script type="text/javascript" LANGUAGE="JavaScript">
document.<%=formName%>.formInd.checked = false;
</script>
</logic:equal>
<logic:empty name="<%=formName%>" property="formInd" >
<html:checkbox name="<%=formName%>" onchange="setDataChanged()" property="formInd"/>
<script type="text/javascript" LANGUAGE="JavaScript">
document.<%=formName%>.formInd.checked = false;
</script>
</logic:empty>