5

いくつかの html タグは、特定の属性の「任意の」値を「true」と解釈します -> オプション タグが思い浮かびます。

私はしばしば次のようなことをすることになります:

<c:choose>
   <c:when test="${isSelected}"/>
        <option selected="true">Opt1</option> 
    </c:when>
   <c:otherwise/>
        <option>Opt1</option> 
   </c:otherwise>
</c:choose>

この動作をカプセル化するカスタムを宣言できることはわかっていますが、Java でコーディングしない限り、これもかなり見苦しくなります。

これを行うためのよりスマートな方法はありますか?

4

4 に答える 4

1

これにアプローチする1つの方法は、カスタムタグを使用することです。

私はJSP2Xコンバーターが採用するアプローチが好きで、これを可能にするWEB-INF/tagsフォルダーにカスタムタグを定義します。

<jspx:element name="option">
    <c:if test="${selected}">
        <jspx:attribute name="selected">selected</jspx:attribute>
    </c:if>
    <jspx:body>Opt1</jspx:body>
</jspx:element>

よりコンパクトなアプローチは、正しいことを行ったオプション専用のカスタムタグを作成し、選択された属性のブール値を取得し、trueの場合はselected = "selected"属性を発行し、それ以外の場合は発行しないことです。これはもう少しコンパクトになります:

<jspx:option selected="${selected}">Opt1</option>
于 2009-12-10T22:35:05.677 に答える
0

はい、よりスマートな方法は次のように書くことです

<option selected="selected">Opt1</option>

それが XHTML によって義務付けられているためです。

私はそれがあなたが本当に求めているものではないことを知っています:-)私はあなたのやり方でいいと思いますか、代わりに条件式を使うことができます:

<option ${isSelected?"selected=\"selected\"":""}>Opt1</option>

短いですが、必ずしもきれいではありません。

于 2009-11-19T08:41:33.987 に答える
0

これを回避する別の方法があります。ちょっとしたハックですが、taglib を使用するか、私が発見したタグを複製する場所を選択する代わりに、非常にうまく機能します。

次のように、値として jstl set タグ内にタグを作成できます。

<c:set var="mytag" value="&lt; option ${isSelected ? 'selected='\true\' : '' } &gt;">

次に、そのタグが必要な場所で、次のように出力します。

${mytag}
于 2011-04-15T16:17:39.187 に答える