условная проверка в c: если всегда не удается - PullRequest
3 голосов
/ 19 января 2010

C: if test всегда для меня завершается неудачей и никогда не попадает в цикл.Я использую следующие пространства имен

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

Строка («массив»), которую нужно разделить: «Том и Джерри - друзья GAP1»

<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>

1 Ответ

7 голосов
/ 19 января 2010

URI ядра JSTL недействителен. В соответствии с JSTL TLD оно должно быть (обратите внимание на дополнительные /jsp):

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

Тем не менее, смешивание JSF с JSTL никогда не было хорошей идеей. Это не всегда даст результаты, как вы ожидаете, потому что они не работают синхронно, как вы ожидаете от кодирования. Более того, JSP / JSTL сначала работает сверху вниз, а затем передает полученный результат JSF для дальнейшей обработки сверху вниз. Это может привести к сбою некоторых конкретных конструкций. Вместо этого лучше использовать чистые компоненты / атрибуты JSF.

Вместо c:forEach лучше использовать a4j:repeat Seam или Facelets 'ui:repeat, а вместо c:if использовать атрибут rendered компонента JSF, который должен быть переключен для отображения / скрытия. Вместо всего этого JSTL c:set напишите соответствующую логику кода в конструкторе управляемого компонента или методе действия или получателе.

Функции JSTL (fn) taglib, тем не менее, по-прежнему очень ценны в JSF. Вы можете продолжать использовать его.

...