Frage

Ich denke vielleicht nicht richtig in Bezug auf visuelle Komponenten in JSF, aber ich denke, das ist Teil meiner Frage. Meine Frage ist um den scheinbaren Mangel an Umfang um Variablen, die in JSF deklariert wurdenu003Cui:component> Implementierungen.

Sagen Sie also, ich habe /resources/comp/mypanel.xhtml:

<?xml version="1.0" encoding="UTF-8" ?>
<ui:component xmlns="http://www.w3.org/1999/xhtml"
              xmlns:h="http://java.sun.com/jsf/html"
              xmlns:f="http://java.sun.com/jsf/core" 
              xmlns:ui="http://java.sun.com/jsf/facelets"
              xmlns:c="http://java.sun.com/jsp/jstl/core"      
              xmlns:cc="http://java.sun.com/jsf/composite">
    <cc:interface>
    </cc:interface>
    <cc:implementation>
        <f:loadBundle var="bundle" basename="panelOnly.bundle" />

        <h:outputText value="#{bundle.myText}" />
    </cc:implementation>
</ui:component>

Und es gibt ein Ressourcenpaket, das in dieser Komponente, panelonly/bündel.Properties geladen wird:

myText = This is a panel resource

Und dann habe ich eine Seite, auf der die Mypanel -Komponente Mainpage.xhtml platziert wird:

<?xml version="1.0" encoding="UTF-8" ?>
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core" 
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:comp="http://java.sun.com/jsf/composite/comp">
    <h:body>
        <f:view>
            <f:loadBundle basename="mainPage.bundle" var="bundle" />

            <comp:myPanel />

            <h:outputText value="#{bundle.myText}" />
        </f:view>
    </h:body>
</html>

und es gibt ein Ressourcenpaket, das auf der Hauptseite geladen wird, Mainpage/Bundle.Properties:

myText = This is a main page resource

Jetzt würde ich annehmen, dass meine Seite als:

This is a panel resource
This is a main page resource

Aber stattdessen bekomme ich:

This is a panel resource
This is a panel resource

Und ich nehme an, dass ich in meiner Komponente das "Bündel" -Symbol bezieht, so dass das "Bündel" der Komponente in meiner Komponente in meiner Komponente bezeichnet wird, wenn die Mainpage.xhtml versucht, diesen Wert aufzulösen.

Meine bisherige Problemumgehung bestand darin, nur einzigartige benannte Variablen in meinen Komponenten zu verwenden, die niemals mit Variablen auf meinen Hauptseiten zusammenbrechen würden. Aber ich würde es bevorzugen, wenn es eine Möglichkeit gäbe, JSF zu überreden, um etwas zu erkennen, das in meiner Komponente als lokal abgeschottete Variablen deklariert wurde und nicht die Symbole des Anrufers klopft.

Ich denke, es gibt und andere Tags, mit denen man lokal Scoped Variablen unter #{cc.attrs ...} herstellen kann. Wenn Sie meine lokalen Scoping -Optionen in Ihrer Antwort aufzählen könnten, wäre dies sehr hilfreich. Ich vermute meineu003Cf:loadBundle> ist ein Sonderfall, und vielleicht gibt es für diese keine Problemumgehung, da er nicht entworfen wurdeu003Cui:component> im Sinn.

Vielen Dank!

PS Ich leite Mojarra 2.1.1 (FCS 20110408)

(Herausgegeben für Formatieren und Kopieren und Einfügen von Fehler 15.06.2011)

War es hilfreich?

Lösung

Leider ist so so <f:loadBundle> Arbeiten. Es ist eine einmalige Einstellung für die gesamte Aussicht. Und alle nachfolgenden <f:loadBundle> Anrufe in derselben Ansicht überschreiben nur die vorherige.

Am besten verwalten Sie es mit einer Backing -Komponente.

<cc:interface componentType="myPanel">

mit

@FacesComponent(value="myPanel")
public class MyPanel extends UIComponentBase implements NamingContainer {

    private ResourceBundle bundle;

    public MyPanel() {
        bundle = ResourceBundle.getBundle("panelOnly.bundle", 
            FacesContext.getCurrentInstance().getViewRoot().getLocale());
    }

    @Override
    public String getFamily() {
        return "javax.faces.NamingContainer";
    }

    public ResourceBundle getBundle() {
        return bundle;
    }

}

die verwendet werden können als

<cc:implementation>
    <h:outputText value="#{cc.bundle.myText}" />
</cc:implementation>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top