JSTLでif-elseオプションを使用する方法


回答:


522

はい、しかしそれは地獄のように不格好です、例えば

<c:choose>
  <c:when test="${condition1}">
    ...
  </c:when>
  <c:when test="${condition2}">
    ...
  </c:when>
  <c:otherwise>
    ...
  </c:otherwise>
</c:choose>

5
ラッパータグ(選択)を除いて、これがif / elseif / elseの場合よりも詳細になるかどうかはわかりません。1つのラッパータグは、「地獄のように不格好」を構成しません。
Steven Benitez、2011年

19
@Steven:それはXMLの性質です。ボイラープレートには、実際のロジックよりも多くの文字があります。
スカフマン、2011年

2
あ、そう。その場合も同じように設定できます<c:if/>
Steven Benitez、2011年

15
私はパーティーに少し遅れていることを知っていますが<c:otherwise>、少し冗長に見えますね?
andronikus '10

6
地獄は説明が親切すぎるように見えるので、適切なインデントと不格好でロジックのネストを開始します。
Adam Tolley 2013

105

さらにskaffman回答では、単純なif-elseを使用すると、次のような三項演算子を使用できます

<c:set value="34" var="num"/>
<c:out value="${num % 2 eq 0 ? 'even': 'odd'}"/>

6
これは良い答えですが、それがどれほど有用であるかについて非常に状況的です。
Mike LP

47

if-elseはありません。

<c:if test="${user.age ge 40}">
 You are over the hill.
</c:if>

オプションで、choose-whenを使用できます。

<c:choose>
  <c:when test="${a boolean expr}">
    do something
  </c:when>
  <c:when test="${another boolean expr}">
    do something else
  </c:when>
  <c:otherwise>
    do this when nothing else is true
  </c:otherwise>
</c:choose>

こんにちは@iwxfer、あなたの上記のリンクは現在利用できません。あなたが良いスコアを得ることができる場合は更新してください。そうでない場合は削除してください。
Ajay2707 2016年

25

ifタグを2つ使用するだけで済んだので、他の人に役立つ場合に備えて回答を追加します。

<c:if test="${condition}">
  ...
</c:if>
<c:if test="${!condition}">
  ...
</c:if>

技術的にはif-elseそれ自体ではありませんが、動作は同じであり、chooseタグを使用する不格好なアプローチを回避するため、要件の複雑さによっては、これが望ましい場合があります。


1
条件が$ {not param.age gt 42 and someOtherVar eq 'foobar'}のように複雑で見苦しい場合を考えてみましょう。!conditionを実行したり、その条件の逆を記述したりできるように、条件を一時ブール変数に格納する必要があります。どちらも醜い。「それ以外の」構文は、保証された逆です。
2016

3
実際、複雑な条件にはローカル変数または逆の変数のいずれかが必要ですが、これらのオプションはどちらも機能します。この方法がchooseタグよりも望ましいかどうかについては、要件がどれほど複雑であるかに依存することを明確にしました。
16年

2
これに同意する。他に1つしかない場合は、マークアップを少なくし、c:chooseを使用します
javaMoca

1
<c:if test = "$ {condition} == true">および<c:if test = "$ {condition == false}">を使用することには、もう1つの利点があります。変数がnull(初期化されていない)の場合、どちらの分岐も実行されないので、問題ありません。<c:choose>および<c:when>を使用すると、変数がnullのときにfalseブランチが実行されます。
Steve Stilson、

3

このコードを使用する必要があります:

<%@ taglib prefix="c" uri="http://www.springframework.org/tags/form"%>

そして

<c:select>
            <option value="RCV"
                ${records[0].getDirection() == 'RCV' ? 'selected="true"' : ''}>
                <spring:message code="dropdown.Incoming" text="dropdown.Incoming" />
            </option>
            <option value="SND"
                ${records[0].getDirection() == 'SND'? 'selected="true"' : ''}>
                <spring:message code="dropdown.Outgoing" text="dropdown.Outgoing" />
            </option>
        </c:select>

-1

これは、時間の複雑さの見通しに沿った、優れた効率的なアプローチです。真の状態になると、この後は他のチェックを行いません。複数の場合、それぞれの状態をチェックします。

   <c:choose>
      <c:when test="${condtion1}">
        do something condtion1
      </c:when>
      <c:when test="${condtion2}">
        do something condtion2
      </c:when>
      ......
      ......
      ...... 
      .......

      <c:when test="${condtionN}">
        do something condtionn N
      </c:when>


      <c:otherwise>
        do this w
      </c:otherwise>
    </c:choose>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.