Oprócz tagu opakowania (wybierz), nie widzę, że jest to bardziej szczegółowe, niż gdyby / elseif / else byłoby. Jeden tag opakowania prawie nie stanowi „niezgrabnego jak diabli”, prawda?
Steven Benitez
19
@Steven: To jest XML. Na płycie kotła jest więcej znaków niż w rzeczywistej logice.
skaffman
2
Ach, okej To samo można również ustawić na ten <c:if/>czas.
Steven Benitez
15
Wiem, że jestem trochę spóźniony na imprezę, ale <c:otherwise>wydaje się trochę gadatliwy, co?
andronikus
6
zacznij zagnieżdżać logikę z odpowiednim wcięciem i niezgrabne, ponieważ piekło będzie wydawało się zbyt miłym opisem.
Adam Tolley,
105
Oprócz odpowiedzi skaffmana, prosty jeśli-możesz użyć trójskładnikowego operatora w ten sposób
To dobra odpowiedź, ale jest bardzo sytuacyjna pod względem przydatności.
Mike LP
47
Nie ma „jeśli-inaczej”, tylko jeśli.
<c:iftest="${user.age ge 40}">
You are over the hill.
</c:if>
Opcjonalnie możesz użyć opcji „wybierz kiedy”:
<c:choose><c:whentest="${a boolean expr}">
do something
</c:when><c:whentest="${another boolean expr}">
do something else
</c:when><c:otherwise>
do this when nothing else is true
</c:otherwise></c:choose>
Chociaż technicznie nie jest to if-elseper se, zachowanie jest takie samo i pozwala uniknąć niezgrabnego podejścia do używania choosetagu, więc w zależności od tego, jak skomplikowane jest twoje wymaganie, może to być lepsze.
Rozważmy przypadek, gdy warunek jest czymś skomplikowanym i brzydkim, jak $ {not param.age gt 42 i someOtherVar eq 'foobar'}. Musisz zapisać warunek w tymczasowej zmiennej boolowskiej, abyś mógł zrobić warunek! Lub napisać odwrotność tego warunku. Obie brzydkie. Składnia „w przeciwnym razie” jest gwarantowaną odwrotnością.
mat płonie
3
Rzeczywiście złożony warunek wymagałby albo zmiennej lokalnej, albo zapisu odwrotnego, ale obie z tych opcji nadal działałyby. Wyjaśniłem, że będzie to zależeć od tego, jak skomplikowane jest wymaganie, czy takie podejście byłoby lepsze niż choosetag.
jonk
2
Zgadzam się z tym. Jeśli masz tylko jedną inną, to mniej marży, a następnie używając c: wybierz
javaMoca
1
Jest jeszcze jedna dodatkowa korzyść z posiadania <c: if test = "$ {condition} == true"> i <c: if test = "$ {condition == false}">. Gdy zmienna ma wartość NULL (nie jest inicjowana), żadna gałąź nie jest wykonywana, co jest dobre. Jeśli wybierzesz <c: wybierz> i <c: kiedy>, gałąź fałszywa zostanie wykonana, gdy zmienna ma wartość null.
Steve Stilson
3
musisz użyć tego kodu:
z <%@ taglib prefix="c" uri="http://www.springframework.org/tags/form"%>
Jest to dobre i skuteczne podejście w perspektywie złożoności czasowej. Gdy osiągnie prawdziwy warunek, nie będzie już sprawdzać innych. W wielu If, sprawdzi każdy i warunek.
<c:choose><c:whentest="${condtion1}">
do something condtion1
</c:when><c:whentest="${condtion2}">
do something condtion2
</c:when>
......
......
......
.......
<c:whentest="${condtionN}">
do something condtionn N
</c:when><c:otherwise>
do this w
</c:otherwise></c:choose>
Odpowiedzi:
Tak, ale jest niezgrabny jak diabli, np
źródło
<c:if/>
czas.<c:otherwise>
wydaje się trochę gadatliwy, co?Oprócz odpowiedzi skaffmana, prosty jeśli-możesz użyć trójskładnikowego operatora w ten sposób
źródło
Nie ma „jeśli-inaczej”, tylko jeśli.
Opcjonalnie możesz użyć opcji „wybierz kiedy”:
źródło
Uciekłem po prostu używając dwóch tagów if, pomyślałem, że dodam odpowiedź na wypadek, gdyby był użyteczny dla kogokolwiek innego:
Chociaż technicznie nie jest to
if-else
per se, zachowanie jest takie samo i pozwala uniknąć niezgrabnego podejścia do używaniachoose
tagu, więc w zależności od tego, jak skomplikowane jest twoje wymaganie, może to być lepsze.źródło
choose
tag.musisz użyć tego kodu:
z
<%@ taglib prefix="c" uri="http://www.springframework.org/tags/form"%>
i
źródło
Jest to dobre i skuteczne podejście w perspektywie złożoności czasowej. Gdy osiągnie prawdziwy warunek, nie będzie już sprawdzać innych. W wielu If, sprawdzi każdy i warunek.
źródło