2009-11-19 10 views
5

いくつかのhtmlタグは、 "true" - > optionタグが思い浮かぶので、give属性の "any"値を解釈します。JSPXから<option selected = "true">を出力するには?

私は頻繁にこのような何かをやって終わる:

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

私は私がJavaでそれをコーディングしない限り、もかなり醜い得ることをこの動作が、をencapslateするためのカスタムを宣言することができます知っています。

これを行うにはスマートな方法がありますか?

答えて

0

はい、賢く方法は、それがmandated by XHTML何だと

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

を書くことであろう。

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

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

それは必ずしもきれいけれども短いのです。

+0

ニース:、その後

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

を次のように、あなただけの出力そのタグを好きな場所答え、それはここではうまくいきません。どのようなバージョンのjspxがこれをあなたのためにしていますか?これはJSPではないと確信していますか? – krosenvold

+0

申し訳ありませんが、実際にはJSPです。私はそれらを交差させました。私はあなたの方法が当てはまる唯一の方法だと思います。 c:この場合にも動作しない場合。 – ChssPly76

1

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

私はあなたがこれをやらせるあなたのWEB-INF /タグフォルダにカスタムタグを定義し、JSP2Xコンバータがかかるというアプローチが好き:

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

よりコンパクトなアプローチは、カスタムタグを具体的に作成することであるかもしれません選択された属性に対してブール値をとり、selected = "selected"属性を出力します。そうでない場合はtrueを返します。これは、もう少しコンパクトに次のようになります。

<select><option selected="selected">問題については
<jspx:option selected="${selected}">Opt1</option> 
+0

私は、条件タグが要素タグ内で許されているとは思っていませんでした。それは後の仕様の変更ですか? – krosenvold

+0

これらのjspx:要素は仕様に含まれていません。JSP2Xによって削除されたカスタムタグです。 –

+0

* sigh *これらのコメントを編集していただけたらと思います。 =) –

0

、私はそれだけで一時間verbosenessだった場合、私は、verbosenessのビットを気にしないだろうことを決めた...ので、私は、タグのドキュメントを作成しましたそのような/WEB-INF/tags/select.tagx中(.tagx):

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" 
    xmlns:c="http://java.sun.com/jsp/jstl/core"> 

    <jsp:directive.attribute name="id" required="true" /> 
    <jsp:directive.attribute name="name" required="true" /> 
    <jsp:directive.attribute name="options" required="true" /> 
    <jsp:directive.attribute name="selected" required="true" /> 

    <select id="${id}" name="${name}"> 
    <c:forEach var="opt" items="${options}"> 
     <c:choose> 
     <c:when test="${opt == selected}"><option selected="selected">${opt}</option></c:when> 
     <c:otherwise><option>${opt}</option></c:otherwise> 
     </c:choose> 
    </c:forEach> 
    </select> 
</jsp:root> 

などのようにそれを使用します。

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<html xmlns="http://www.w3.org/1999/xhtml" version="2.1" 
    ... 
    xmlns:form="urn:jsptagdir:/WEB-INF/tags/"> 

    ... 

    <head> 
     ... 
    </head> 
    <body> 
     <form method="POST" commandName="loginRequest" action="index_login.html"> 
      <fieldset id="loginFieldSet"> 
       ... 

       <div> 
        <label for="day" path="day">Favourite day: </label> 
        <form:select id="day" name="day" selected="Saturday" 
         options="Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday" /> 
       </div> 
      </fieldset> 
      <div> 
      <input type="submit" tabindex="3" /> 
      <input type="reset" tabindex="4" /> 
      </div> 
     </form> 
    </body> 
</html> 

krosenvold、私はこれは多分迷惑な...醜いであることに同意していないが、私は実際にようれしい私はwを必要としなかったこのための任意のコードを立ててください。タグを定義すると、JSPXはより緻密になります。それに、私は単純にこれの短縮があるとは思わない。

+0

ELの三項演算子を使うだけです。 '

+0

実際にこれを試しましたか?それは動作しません - それは完全に無効なXMLです。 –

0

これを回避する別の方法があります。これはちょっとしたハックですが、taglibを使う代わりに、あるいは私が見つけたタグをどこに複製するかを選択するのも良い方法です。

あなたは、値としてJSTLセットタグ内にこのようなものタグを構築することができ

${mytag} 
関連する問題