2016-05-27 10 views
0

Ich bin Anfänger in Java Server Faces (JSF), muss ich den Inhalt der Texteingabe auf der zweiten Seite übergeben, um es anzuzeigen, das Gleiche gilt für die zweite Seite: Ich möchte übergeben Radioknöpfe Werte auf eine dritte Seite. Ich habe viel gesucht und versucht, ohne Erfolg. Zum Beispiel habe ich versucht,Übergabe von Werten von Seite auf andere Seite JSF

<h:commandButton value="Next" action="#{myBean.execute(input_id.value)}"/> 

Execute-Methode ist:

public void execute(String value) { 
// ... 

    try{ 
     FacesContext.getCurrentInstance().getExternalContext().dispatch("/Quizy.xhtml?faces-redirect=true"); 
    } 
    catch(Exception e){ 
     System.out.println("err");  
    } 
} 

Irgendwelche Vorschläge?

+0

den Wert einer Eigenschaft eines Ihrer Manager oder cdi Bohnen ein. –

Antwort

2

Es gibt mehrere Möglichkeiten, dies zu tun, aber hier ist einer von ihnen. Sie müssen den input Wert in eine Eigenschaft Ihrer Bean speichern und sowohl Ihre h:inputText und Ihre h:commanButton im gleichen h:form Element

Hier ist ein Beispielcode

Ihrer Ansicht

<h:form> 
    ... 
    <h:inputText value={myBean.someValue} /> 
    .... 
    <h:commandButton value="Next" action="#{myBean.execute()}"/> 
</h:form> 
sein sollte

Ihre verwaltete Bean sollte mindestens Sitzung Bereich sein, wenn Sie Ihre Eigenschaft (someValue) in verschiedenen Seiten verfügbar sein möchten. Der Inhalt der Managed Bean sollte wie dieser auch aussehen:

private String someValue; 

// Getter and setter for `someValue` 

public String execute() { 
    // ... 
    return "/Quizy.xhtml?faces-redirect=true"; 
} 

Auf der zweiten Seite, wenn Sie diesen Wert abrufen möchten, verwenden Sie einfach #{myBean.someValue}

+0

Ihre Beschreibung ist klar, danke @tfosra! –

+0

Aber ich denke, dass execute() String nicht void zurückgeben sollte! –

+0

Gern geschehen. Ich werde meine Antwort bearbeiten, um eine 'Return String' – tfosra

0

dies getan zu haben, müssen Sie nur die festlegen müssen Wert Ihrer Komponente hier inputText oder radioButton zu einer Eigenschaft Ihrer Managed Bean oder Cdi Bean aufgerufen auf der Seite natürlich werden Sie nicht vergessen, Getter und Setter-Methode für Ihre Eigenschaft in Ihrer Bean haben. Stellen Sie abschließend sicher, dass der Gültigkeitsbereich von Ur bean in der gesamten Sitzung gültig ist (mit all seinen Eigenschaften). Dann wird von ur Ende Seite können Sie ur Managed Bean oder Cdi Bohne nennen proprety als Wert der Seite Komponenten

4

Es gibt 4 Möglichkeiten, um einen Parameterwert von JSF Seite zu anderen Seite JSF weitergeben müssen:

1- Method expression (JSF 2.0) 
2- f:param 
3- f:attribute 
4- f:setPropertyActionListener 

1. Methode Ausdruck

Da JSF 2.0, Sie erlauben Parameterwert in dem Verfahren, wie dieser Ausdruck # {bean.method (param)} übergeben.

JSF Seite

<h:commandButton action="#{user.editAction(delete)}" /> 

ManagedBean

@ManagedBean(name="user") 
@SessionScoped 
public class UserBean{ 

    public String editAction(String id) { 
     //id = "delete" 
    } 

} 

2- f: param

Übergeben Sie den Parameterwert über den Parameter f: param und rufen Sie ihn über den Anforderungsparameter im Backing-Bean ab.

JSF Seite

<h:commandButton action="#{user.editAction}"> 
     <f:param name="action" value="delete" /> 
</h:commandButton> 

ManagedBean

@ManagedBean(name="user") 
@SessionScoped 
public class UserBean{ 

    public String editAction() { 

     Map<String,String> params = 
       FacesContext.getExternalContext().getRequestParameterMap(); 
     String action = params.get("action"); 
      //... 
    } 
} 

3. f: atribute

Übergeben Sie den Parameterwert über das f: atribute -Tag und rufen Sie es über den Aktionslistener im Backing-Bean ab.

JSF Seite

<h:commandButton action="#{user.editAction}" actionListener="#{user.attrListener}"> 
    <f:attribute name="action" value="delete" /> 
</h:commandButton> 

ManagedBean

@ManagedBean(name="user") 
@SessionScoped 
public class UserBean{ 

    String action; 

    //action listener event 
    public void attrListener(ActionEvent event){ 
    action = (String)event.getComponent().getAttributes().get("action"); 
    } 

    public String editAction() { 
    //... 
    } 
} 

4. f: setPropertyActionListener

Übergeben Sie den Parameterwert über das f: setPropertyActionListener-Tag. Dadurch wird der Wert direkt in Ihre Backing-Bean-Eigenschaft gesetzt.

JSF Seite

<h:commandButton action="#{user.editAction}" > 
    <f:setPropertyActionListener target="#{user.action}" value="delete" /> 
</h:commandButton> 

ManagedBean

@ManagedBean(name="user") 
@SessionScoped 
public class UserBean{ 

    public String action; 

    public void setAction(String action) { 
     this.action = action; 
    } 

    public String editAction() { 
     //now action property contains "delete" 
    } 

} 
+0

Ihre Antwort ist interessant, da es mehr als einen Weg, es zu tun, ich denke, es wäre eine gute Referenz für mich in den nächsten Tagen. Danke! –