JSF JSF: Methode bei versteckt aufrufen & Parameter übergeben

Dieses Thema JSF - JSF: Methode bei versteckt aufrufen & Parameter übergeben im Forum "Web Tier" wurde erstellt von MadBlue, 22. Juni 2015.

Thema: JSF: Methode bei versteckt aufrufen & Parameter übergeben Hallo zusammen, ich arbeite gerade an meinem 1. größeren JSF & PrimeFaces Projekt. (Bisher habe ich viel mit GWT...

  1. Hallo zusammen,

    ich arbeite gerade an meinem 1. größeren JSF & PrimeFaces Projekt. (Bisher habe ich viel mit GWT und einigen älteren JSP basierten Frameworks gearbeitet, die ebenfalls primär BackEnd-Generated-FrontEnd-Code verwenden)

    Dabei sind mir nun zwei Herausforderungen begegnet für die ich noch keine Lösung finden konnte.

    1. Ich möchte bei einigen JSF-Seitenaufrufen, dass diese eine Methode in einer Bean aufrufen. Gibt es dafür ggf. ein eigenes 'hidden' Tag, welches ich da einbauen kann? (Oder 'pfusch' ich das einfach durch einen value Aufruf irgendwo bei den ich eigentlich nicht brauche...?) ( also alá <h:hidden value="#{meineBean.meineMethode}" >

    2. Gibt es eine Möglichkeit Parameter direkt aus der JSF Datei an eine Methode in einer Bean zu übergeben?

    Schon einmal vielen Dank für eure Hilfe,

    Sören
     
  2. Vielleicht helfen dir diese Java-Grundlagen weiter --> *Klick*
  3. zu (1):
    Du kannst in jeder Bean eine init()-Methode definieren, die bei Initialisierung der Bean (d.h. beim ersten Request aus einer JSF-Seite und bei jeder folgenden Initialisierung (abhängig vom Scope) ausgeführt wird.
    Die Methode muss die Signatur public void init() haben und mit @PostConstruct annotiert werden. Dann wird sie nach Abschluss der Dependency Injection ausgeführt.
    Die init() Methode ist die gängige Variante. Manchmal kann auch <p:remoteCommand> hilfreich sein, z.B. für asynchrone Requests.

    zu (2):
    Eine konkretere Beschreibung des Anwendungsfalls wäre hilfreich. Wills du die Parameter einmalig übergeben? Dauerhaft aktuell halten? Eventgesteuert übergeben (Button, ...)?
     
  4. Hi,

    erst einmal danke für deine Antwort.
    Das mit dem init() und ProstConstruct als Alternative zum Constructor kannte ich...
    Allerdings existiert die Bean in der Regel schon und wird von mehreren JSF Seite verwendet...
    Das remoteCommand sieht aber sehr danach aus, als wäre es dass, was ich suche!


    Zu 2:
    Einfacher UseCase wäre zB.: Ich habe eine Tabelle mit Daten. Die Inhalte der Zeilen sind verlinkt. Beim Aufrufen des Links wird eine Detailansicht geladen. Ich möchte nun (je nachdem welche Zeile gewählt wurde) einen Parameter an eine Methode übergeben.
     
  5. zu 1:
    Eine möglichst saubere Trennung der Beans ist im Allgemeinen empfehlenswert ;-)
    Beim RemoteCommand nicht vergessen, es in ein <h:form> einzubetten, alles weitere müsstest du im PF Showcase/Doku finden.

    zu 2:
    Etwas in dieser Richtung sollte funktionieren:
    HTML:

    <h:form>
      <p:dataTable value="#{bean.persons}" var="person" ...>
        <p:column><p:commandLink actionListener="#{bean.sayHello(person)}" value="Click me" /></p:column>
      </p:dataTable>
    </h:form>
     
    //class Bean:
    Code (Java):

    public List<Person> getPersons(){ ... }

    public void sayHello(Person person){
       System.out.println("Hi, it's me, " + person.getFirstName());
    }
     
     
    Zuletzt bearbeitet: 22. Juni 2015
  6. Ah super! Vielen Dank! Das 2. ist GENAU das wonach ich gesucht habe, quasi schon fertig ausformuliert.

    Der RemoteCommand funktioniert noch nicht so wie ich möchte, aber vielleicht hab ich es auch ungünstig erklärt.
    So habe ich es zZ. implementiert:
    HTML:
    <h:form>
        <p:remoteCommand action="#{subsupplierHandler.loadBySupplier}" />
    </h:form>
    Die Methode wird jedoch nicht aufgerufen.
    Sinn soll sein, jedesmal die Methode aufzurufen, wenn die Seite geladen wird. (zB. um die Bean wieder in Ihren ursprungszustand zu bringen...)

    Sören
     
    Zuletzt bearbeitet: 22. Juni 2015
  7. Code (Text):
    <p:remoteCommand autoRun="true" action=... />
    :)

    Der Vollständigkeit halber: Um Beans beim Seitenaufruf in den Ursprungszustand zu bringen, gibt es @ViewScoped. Ohne den Kontext näher zu kennen, klingt die remoteCommand-Lösung ein bisschen gepfuscht ;-)
     
    Zuletzt bearbeitet: 22. Juni 2015
  8. Ja das kann schon sein, dass es etwas mehr 'hotfix' ist. Ich bin schon recht weit mit dem Projekt und bin nun mit ein paar Dingen konfrontiert an die ich vorher nicht gedacht habe. (Eben weil MVC und JSF anders funktionieren als GWT etc.) Das sind halt die lessons learned fürs nächste mal. ;)

    Mit dem autoRun wurde die Methode aufgerufen, dankeschön! :)

    ViewScoped hat das Problem, dass es wieder für alle meine views gilt.

    EDIT:
    Habs jetzt mit in die Navigation eingebaut. Auch nicht optimal aber wohl sauberer. Trotzdem vielen Dank. :)
     
    Zuletzt bearbeitet: 22. Juni 2015
  9. KOSTENLOSES Java-Grundlagen Training im Wert von 39 € Sichere dir hier den kostenlosen Zugriff auf umfangreiches Java-Know How und starte richtig durch!