Übergabe von Parametern an eine bean-Methode eine datatable in einer Ansicht/Seite in JSF 2.0

Ich habe eine Seite mit einer datatable, füllt aus einer Liste. Die Liste hat viele ids, die ich übergeben zu müssen, an eine bean-Methode, und führen Sie eine Datenbank-operation.Ich bin mit einem commandButton rendered-Attribut, um einen Anruf zu tätigen, um die bean-Methode (findInfo()). Brauche ich zum bestehen der ids (myBean.testList.id) ein zu einer Zeit aus der Liste, um die bean-Methode, so dass ich die boolean zurück. Zuerst, ich bin nicht sicher, wie Sie Sie übergeben wird die id (die findInfo-Methode in meinem bean), zweitens, wenn ich tag, ich am Ende, wenn nur eine einzelne ID. Könnte jemand bitte empfehlen Sie mir eine Lösung. Ich versuchte es mit den codes wie unten.

Meine Bohne

@ManagedBean(name="myBean")
public class MyBean(){

  public boolean findInfo(Integer indId){
    boolean var = dataProvider.isIdPresent(indId); //database operation
    if (var)
        return true;
    else 
        return false;
  }
}

xhtml-Seite

<h:dataTable value="#{myBean.testList}" var="t" >

  <h:column>
    <f:facet name="header">
        <h:outputText value="Actions" />
    </f:facet>

    <h:commandButton value = "Add"
    action = "#{someBean.loadReport}"
    rendered = "#{myBean.findInfo() == false}"/>

    <h:commandButton value = "View"
    action = "#{someBean.loadReport}"
    rendered = "#{myBean.findInfo() == true}"/>

</h:column>
<h:column>
...
</h:column>
</h:dataTable>

UPDATE:
Ich habe versucht, Folgen die Antwort, dass BalusC erklärt (dass kolossus gepostet), dass ich am Ende übergeben Sie die id als null in f:param. Irgendwelche Vorschläge. Mein code aktualisiert:

<h:dataTable value="#{myBean.testList}" var="t" >

<h:column>
    <f:facet name="header">
        <h:outputText value="Actions" />
    </f:facet>


    <h:commandButton value = "Add"
    action = "#{someBean.loadReport}"
    rendered = "#{myBean.findInfo() == false}">
        <f:param name="id" value="#{t.id}" /> 

    </h:commandButton>

    <h:commandButton value = "View"
    action = "#{someBean.loadReport}"
    rendered = "#{myBean.findInfo() == true}">
        <f:param name="id" value="#{t.id}" /> 
    </h:commandButton>

</h:column>
<h:column>
...
</h:column>

Meine Aktuelle Bohne

@ManagedBean(name="myBean")
@RequestScoped
public class MyBean(){

@ManagedProperty("#{param.id}")
private Integer indId;

public boolean findInfo(){
    boolean var = dataProvider.isIndIdPresent(indId);
    if (var)
        return true;
    else 
        return false;
}
}

Außerdem denke ich, dass ich nicht verwenden können, f:ViewParam wie rufe ich die Bohne von der Daten-Tabelle in der gleichen Ansicht.

  • möglich, Duplikat der die Übergabe von Parametern zwischen managed beans mit request-scope
  • Ich habe versucht zu ändern mein code basiert auf dem Beitrag, den Sie erwähnt. Aber es hat nicht funktioniert. Ich klebte meine aktualisierte code. Jede Hilfe zu schätzen.
  • "Hat nicht funktioniert".equals("?"). 🙂 Hat es die param null zurück? Hat es eine exception werfen? Dies sind brennende Fragen @mona. Hoffe, du hast nicht vergessen, fügen Sie die getter und setter für indId (ich kann nicht sehen es hier überall) und Ihre @RequestScoped ist von der javax.faces.bean Paket. Als letzten Ausweg, alternative, übergeben Sie die variable direkt in Ihrem markup action = "#{someBean.loadReport(t.id)}" und ändern Sie Ihre Signatur der Methode entsprechend. Dies funktioniert nur, wenn du auf JSF mit EL2.2
  • Die f:param null zurück, um die managed bean. Ich hatte die getter/setter für indId, @RequestScoped ist von javax.Gesichter.bean-Paket, aber ich kann nicht das indId in meiner Bohne. Ich bin nicht mit JSF mit EL2.2, so kann es nicht weitergehen für die Letzte alternative, die Sie vorgeschlagen. Die aktualisierten codes eingefügt, über alle änderungen habe ich jetzt.. Danke für Eure Vorschläge, bitte lassen Sie mich wissen, wenn Sie denken, ich sollte hinzufügen, etwas mehr.....Dank
  • Ich habe komplett übersehen das render-Zustand. Ihr machen, Zustand ist Recht verworren: es kommt auf einen Wert wird immer 0 sein, da zu der Zeit der Wert ausgewertet wird. Um zu überprüfen, dass dies die Ursache des Problems jetzt, entfernen Sie es und versuchen Sie, übergeben Sie die parameter. Letztlich, um zu beheben, Führen Sie die check-in eine Methode annotiert mit @PostConstruct und verwenden Sie die eq operator (statt ==) in der render-Zustand
InformationsquelleAutor mona | 2013-03-28
Schreibe einen Kommentar