2010-01-19 2 views
3

Le c: si le test échoue toujours pour moi et qu'il ne pénètre jamais dans la boucle. J'utilise les espaces de noms suivantscheck-in conditionnel c: si toujours échoue

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

La chaîne ('array') à diviser est "Tom et Jerry sont Gap1 amis"

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

Répondre

7

L'URI de base JSTL est invalide. Selon le JSTL TLD il devrait être (noter le /jsp supplémentaire):

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

Cela dit, le mélange JSF avec JSTL est jamais été une bonne idée. Cela ne donnera pas toujours les résultats escomptés, car ils ne sont pas synchronisés comme vous pouvez l'attendre d'après le codage. JSP/JSTL s'exécute d'abord de haut en bas, puis transmet le résultat produit à JSF pour le traiter de nouveau de haut en bas. Cela entraînerait l'échec de certaines constructions spécifiques. Mieux vaut utiliser des composants/attributs JSF purs à la place.

Au lieu de c:forEach plutôt utiliser a4j:repeat de Seam ou Facelets' ui:repeat et au lieu de c:if faire usage de l'attribut rendered du composant JSF qui doit être basculée pour afficher/masquer. Au lieu de tout ce JSTL c:set, écrivez la logique de code appropriée dans le constructeur de bean géré ou la méthode d'action ou getter.

Les fonctions JSTL (fn) taglib sont cependant toujours très utiles dans JSF. Vous pouvez continuer à l'utiliser.

+0

J'ai apporté la modification suivante à mon code xmlns: c = "http://java.sun.com/jsp/jstl/core Toutes les instructions de débogage (h: outputText) impriment des valeurs vides pour moi. Si toutes les fonctions de fn: fonctionnent correctement pour moi ici, qu'est-ce qui me manque ici? – Achaius

+0

Lire http://www.ilikespam.com/blog/c:foreach-vs-ui:repeat-in-facelets. dit ci-dessus, supprimer c: forEach et c: si, ils sont en cours d'évaluation lorsque la vue est construite, pas lorsque les valeurs sont appliquées à la page. – mtpettyp