web-dev-qa-db-fra.com

Que fait <f: facet> et quand devrais-je l’utiliser?

J'ai eu des problèmes avec le tag <f:facet>. Je travaille sur d'autres exemples de code qui l'utilisent, mais je ne sais pas exactement à quoi il sert.

J'ai écrit un code qui, dans la méthode, est exactement le même que les autres codes que j'ai vus qui fonctionne, sauf qu'il est enveloppé dans un <f:facet name=actions> tag. Lorsque j'ajoute ceci autour de mon code, la liste déroulante que je suis en train de boucler disparaît lorsque je déploie. Toute personne capable de suggérer une raison à cela ou de me donner un aperçu de comment et quand utiliser facette?

Voici mon code, je ne m'embêterai pas à ajouter le code bean car ce sont juste des accesseurs et des passeurs de base et je ne pense pas qu'ils posent problème.

<f:facet name="actions">
    <p:selectOneMenu id="SwitchWeekDrpDwnMenu" 
                     value="#{depotWorkloadBean.selectView}"
                     partialSubmit="true">
        <p:ajax update="mainForm" 
                listener="#{depotWorkloadBean.updateView}" />
        <f:selectItem itemLabel="Day view" itemValue="Day"/>
        <f:selectItem itemLabel="01/01/2014" itemValue="Week"/>
    </p:selectOneMenu>
</f:facet>

Si je supprime la balise de facette, la liste déroulante s'affiche, mais ne fonctionne pas comme il se doit avec les haricots.

46
hello123

Une facette représente une section nommée dans un composant conteneur. Par exemple, vous pouvez créer un en-tête et une facette de pied de page pour un composant dataTable. https://web.archive.org/web/20170828020413/http://www.jsftoolbox.com/documentation/help/12-TagReference/core/f_facet.html

C'est utile lorsque vous voulez créer un composant qui utilise du code d'utilisateur (par exemple, un wrapper).

c'est à dire. lorsque vous souhaitez créer un composant qui masque un texte long et en affiche une version abrégée. Vous pouvez utiliser uniquement le corps de l'élément, mais vous obtiendrez alors une seule valeur. Si vous souhaitez obtenir de l'utilisateur la version courte ET la version longue, vous ne pouvez pas le faire dans une valeur (sans utiliser de discriminant), utilisez simplement facette et dites lequel est le long et quelle est la version courte.

<textShortener>
    <f:facet name="short">
        This text is short.
    </f:facet>
    <f:facet name="long">
        This text is too <b>long</b to be showed when page loads. User have to click the button after the short text to show this.
    </f:facet>
</textShortener>

Oui, cela peut (et devrait) être fait avec des modèles JSF, mais j'espère que vous l'avez.

À la question: vous avez défini une facette dans le code xml sauvage, personne ne l’a demandé, donc personne ne l’a traitée - c’est pourquoi il n’a pas jeté d’erreur ni rien montré.

16
Flowy