将值从页面传递到其他页面JSF

Ahm*_*ssa 1 jsf jsf-2

我是java服务器面(JSF)的初学者,我需要将文本输入的内容传递给第二页来显示它,同样适用于第二页:我想将单选按钮值传递给第三页.我搜索并尝试了许多没有成功.比如我试过了

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

执行方法是:

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

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

有什么建议?

小智 9

有四种方法可以将参数值从JSF页面传递到其他页面JSF:

1- Method expression (JSF 2.0)
2- f:param
3- f:attribute
4- f:setPropertyActionListener
Run Code Online (Sandbox Code Playgroud)

1.方法表达

从JSF 2.0开始,您可以在方法表达式中传递参数值,如#{bean.method(param)}.

JSF页面

<h:commandButton action="#{user.editAction(delete)}" />
Run Code Online (Sandbox Code Playgroud)

ManagedBean

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

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

}
Run Code Online (Sandbox Code Playgroud)

2- f:param

通过f:param标签传递参数值,并通过辅助bean中的请求参数返回.

JSF页面

<h:commandButton action="#{user.editAction}">
        <f:param name="action" value="delete" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

ManagedBean

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

    public String editAction() {

      Map<String,String> params = 
                FacesContext.getExternalContext().getRequestParameterMap();
      String action = params.get("action");
          //...
    }
}
Run Code Online (Sandbox Code Playgroud)

3. f:属性

通过f:atribute标记传递参数值,并通过辅助bean中的动作侦听器将其返回.

JSF页面

<h:commandButton action="#{user.editAction}" actionListener="#{user.attrListener}"> 
    <f:attribute name="action" value="delete" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

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() {
    //...
  }   
}
Run Code Online (Sandbox Code Playgroud)

4. f:setPropertyActionListener

通过f:setPropertyActionListener标记传递参数值,它会将值直接设置到您的支持bean属性中.

JSF页面

<h:commandButton action="#{user.editAction}" >
    <f:setPropertyActionListener target="#{user.action}" value="delete" />
</h:commandButton>
Run Code Online (Sandbox Code Playgroud)

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"
    }   

}
Run Code Online (Sandbox Code Playgroud)


tfo*_*sra 7

有几种方法可以做到这一点,但这里有一个.您需要将inputText值保存到bean的属性中,并且您h:inputText和您的属性h:commanButton应该在同一个h:form元素中

这是一个示例代码

在你看来

<h:form>
    ...
    <h:inputText value={myBean.someValue} />
    ....
    <h:commandButton value="Next" action="#{myBean.execute()}"/>
</h:form>
Run Code Online (Sandbox Code Playgroud)

如果您希望您的属性(someValue)在不同的页面中可用,那么您的托管bean至少应该是会话作用域.托管bean的内容也应如下所示:

private String someValue;

// Getter and setter for `someValue`

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

在第二页中,如果要检索该值,只需使用 #{myBean.someValue}