3 Stimmen

bedingte Prüfung in c:if schlägt immer fehl

Der c:if-Test schlägt bei mir immer fehl, und er gelangt nie in die Schleife. Ich verwende die folgenden Namespaces

xmlns:fn="http://java.sun.com/jsp/jstl/functions"
xmlns:c="http://java.sun.com/jstl/core"

Die aufzuteilende Zeichenkette ('array') ist "Tom und Jerry sind GAP1-Freunde".

<s:decorate template="/layout/display-text.xhtml">
    <c:set var="array" value="#{_mybean.value}"/>
    <c:set var="space" value="#{fn:split(array, ' ')}"/>
    <c:set var="len" value="#{fn:length(space)}"/>
    <h:outputText value="total length = #{len}"/><br/>
    <c:forEach begin="0" end="5" var="index">
        <h:outputText value="index = #{index}, value = #{space[index]}"/><br/>
        <c:set var="val" value="#{space[index]}"/>
        <c:if test="#{fn:startsWith(val, 'GAP')}">
            <h:outputText value="Found keyword parameter GAP" /><br/>
        </c:if>
    </c:forEach>
</s:decorate>

7voto

BalusC Punkte 1034465

Der JSTL-Kern-URI ist ungültig. Gemäß der JSTL TLD sein sollte (beachten Sie den Zusatz /jsp ) :

xmlns:c="http://java.sun.com/jsp/jstl/core"

Das heißt, JSF mit JSTL zu mischen, war noch nie eine gute Idee. Es wird nicht immer zu den erwarteten Ergebnissen führen, weil sie nicht so synchron laufen, wie man es von der Codierung her erwarten würde. Es ist eher so, dass JSP/JSTL zuerst von oben nach unten läuft und dann das erzeugte Ergebnis an JSF übergibt, um es wieder von oben nach unten zu verarbeiten. Das würde dazu führen, dass einige spezifische Konstrukte fehlschlagen. Verwenden Sie stattdessen besser reine JSF-Komponenten/Attribute.

Anstelle von c:forEach verwenden, sondern die Seam a4j:repeat oder Facelets' ui:repeat und anstelle von c:if nutzen Sie die rendered Attribut der JSF-Komponente, das zum Ein- und Ausblenden umgeschaltet werden muss. Anstatt all dieser JSTL c:set Schreiben Sie die entsprechende Codelogik in den Konstruktor der verwalteten Bohne oder die Aktionsmethode oder den Getter.

Die JSTL-Funktionen ( fn ) ist die Taglib in JSF jedoch immer noch sehr wertvoll. Sie können sie weiterhin verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X