2011-01-18 13 views
4

リストの最初と最後の項目に特別なクラスが割り当てられているLIのリストを生成するJSPファイルがあります。 (これは動作します)この場合の問題点は、唯一つの結果があるとき場合には、クラスが「最初の最後の」なるべき、ということであるJSTL c:set文の空白を避ける

<c:set var="liclass"> 
    <c:if test="${rowStatus.first}">first</c:if> 
    <c:if test="${rowStatus.last}"> last</c:if> 
</c:set> 

<%-- not very pretty --%> 
<li<c:if test="${not empty liclass}"> class="${liclass}"</c:if>> 

、それはfirst [...] last次のようになります。私は現在、そのために、次のビットを使用しますここで、[...]は空白文字の束を表しています。

<c:set>は、使用されているインデントによって引き起こされる空白もかかりそうです。空白なしで入力するだけで問題を解決できます。

<c:set var="liclass"><c:if test="${rowStatus.first}">first</c:if><c:if test="${rowStatus.last}"> last</c:if></c:set> 

しかし、私は可読性のあるものを好むでしょう。もう1つの方法は、過剰な空白を取り除く関数を通して結果を取り出すことです。

質問:このような空白を<c:set>タグで設定しないようにする方法や手法はありますか?

答えて

7

私は条件演算子?:の助けを借りてvalueという属性でまっすぐにします。きれいではありません<li>部分について

<c:set var="liclass" value="${rowStatus.first ? 'first' : ''}" /> 
<c:set var="liclass" value="${liclass}${rowStatus.last ? ' last' : ''}" /> 

、私はちょうど

<c:set var="liclass" value="${empty liclass ? 'none' : liclass}" /> 

を追加し、

<li class="${liclass}"> 

真にしてください、それは/非最初の最後の要素のため、一見無価値class="none"を追加誰が気にしますか?具体的な質問については


、あなたは空白true@pagetrimDirectiveWhitespaces属性を設定することにより、タグライブラリが残しトリミングすることができます。

<%@page trimDirectiveWhitespaces="true" %> 

(サーブレット2.5/JSPでのみ2.1コンテナを作品)

またservletcontainerレベルでそれを設定することができます。それはあなたが使用しているどちら不明確なので、ここだけのApache Tomcatの例です:Tomcat/conf/web.xml追加/編集におけるJSPサーブレットのエントリ次の初期化パラメータで:

<init-param> 
    <param-name>trimSpaces</param-name> 
    <param-value>true</param-value> 
</init-param> 

いずれかの方法で、私は上から言うことができませんそれがfirst lastで終わる所望の効果を達成することを保証しない。あなたはそれを自分で試す必要があります。

+0

非常に良い答え、ありがとう。私はEL式の条件付き演算子(三項演算子)を知らなかった。私はそのようなものを検索したが、どこにも見つからなかった。 JSP/JSTLのドキュメントはより良いかもしれません。無価値なクラスについては - 私は気にします; D。私はFirebugでコードを見ると、死んだ属性が私をうんざらさせる。 trimDirectiveWhitespaces属性は、私が気付かなかった別のものです。この場合も、他のプロジェクト/ケースの両方で、あまりにも多くの助けになるでしょう。どうもありがとう! – fwielstra