7
votes

Problème avec UI JSF: Composition et composant composite

J'essaie de savoir s'il s'agit d'un problème JSF / EL ou quelque chose qui ne va pas ici.

Fondamentalement, je voulais transmettre un objet d'élément en tant qu'UI: paramètres ui: composition et avoir un bouton à l'intérieur. (c.-à-d. Boutons de bootstrap, de sorte qu'ils sont en réalité des liens HTML, d'où l'utilisation de CommandLink) et d'effectuer une action à l'aide de l'élément param. Voici l'UI: composition item.xhtml étant passée des params. P> xxx pré>

maintenant je veux que ce bouton soit un composant composite "BT: bouton", mais il semble avoir Un problème résolvant le paramètre "Item". Pour confirmer cela, j'ai pris le CommandLink hors du composant et le mettre sur la page et bien sûr, cela fonctionnait. En outre, si je déplace le bouton BT: en dehors de l'interface utilisateur: composition, cela fonctionne aussi. Enfin si je change d'élément pour être une chaîne à l'aide de citations simples telles que "Test", cela fonctionne également (à des fins de test, ma méthode d'action prend un objet). Sur la base de ces 3 cas, il semble que la composante composite ait du mal à résoudre le paramètre d'élément transmis à une composition. P>

Voici un exemple du 1er test (c.-à-d. Le composant composite verset le Commandlink JSF régulier) Intérieur Item.xhtml: P>

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:cc="http://java.sun.com/jsf/composite"
      xmlns:f="http://java.sun.com/jsf/core">

<cc:interface componentType="LinkComponent">
    <cc:attribute name="action" targets="button"/>
    <cc:attribute name="value" type="java.lang.String"/>
    <cc:attribute name="active" type="java.lang.Boolean"/>
    <cc:attribute name="title" type="java.lang.String"/>
    <cc:attribute name="styleClass" type="java.lang.String"/>
    <cc:attribute name="disabled" type="java.lang.Boolean"/>
    <cc:attribute name="style" type="java.lang.String"/>
</cc:interface>

<cc:implementation>
    <h:commandLink id="button" binding="#{cc.link}"
                   styleClass="btn #{cc.attrs.active ? 'active' : ''} #{cc.attrs.disabled ? 'disabled' : ''} #{cc.attrs.styleClass}"
                   title="#{cc.attrs.title}" style="#{cc.attrs.style}" disabled="#{cc.attrs.disabled}" value="#{cc.attrs.value}">
        <cc:insertChildren/>
    </h:commandLink>
</cc:implementation>
</html>


5 commentaires

Quelle version et quelle implémentation JSF utilisez-vous actuellement?


J'utilise Mojarra 2.1.11


Où est le # {item} vient? D'un composant répétitif? Si oui, lequel?


# {item} vient du # {itemvm.item} . ItemVM est juste un haricot géré de la vue, et pas d'interface utilisateur: la répétition est utilisée dans ce cas. Je prends cette propriété et transmettez-la à la composition item.xhtml à l'aide de ui: param Nom = "élément" valeur = "# {itemvm.item}" . J'ai créé une composition d'élément.xhtml car je souhaite réutiliser ce code JSF / HTML dans quelques pages, donc en passant à l'article en tant qu'UI: Param Cela me permet de le faire - jusqu'à ce que je rencontrais dans cette question bien sûr.


Cela semble être le bug JSF JavaserverFaces_Spec_Public-1223 . La réponse UI: param avec composant composite décrit une solution de contournement.


3 Réponses :


0
votes

J'avais le même besoin que vous et faire un composant composé dans lequel j'ai inséré des enfants avec des paramètres de vue en tant qu'attributs comme vous le faites, et la valeur a toujours été null, alors je pense que c'est une question JSF.


1 commentaires

Ouais, étant donné que mes 2 autres approches fonctionnent parfaitement avec les paramètres de l'UI, ma suspicion est que c'est une question JSF relative aux composants composites et à l'évaluation des paramètres de l'UI. C'est bon d'entendre que je ne suis pas le seul, souhaité que cela fonctionnait cependant.



0
votes

Essayez de remplacer xxx

avec xxx


2 commentaires

Souhaitez-vous éditer votre réponse pour faciliter la compréhension?


Malheureusement, il s'agit d'un ancien projet et je n'ai plus le test ci-dessus facilement disponible. Cependant, je ne vois pas comment remplacer le '> =' avec 'ge' fera une différence ici. Le problème est que le paramètre "élément" n'était pas résolu, alors que l'évaluation logique elle-même fonctionnait bien avec "> =".



0
votes

Je ne suis pas sûr, mais je suppose que vous devriez essayer de remplacer xxx

avec xxx


0 commentaires