JSF - 在JSF页面中的两个RequestScoped Managed bean之间传递参数

时间:2015-06-30 20:03:57

标签: forms jsf jsf-2 primefaces

我正在尝试思考一个问题,即JSF页面可以将一个托管bean的属性传递给通过表单提交的另一个托管bean的属性。两个托管bean都是RequestScoped,以保持应用程序尽可能简单,并从一个页面视图移动到下一个 - 没有Ajax。

Bean A

@ManagedBean
@RequestScoped
public class BeanA implements Serializable{
private long ID;
private String name;

//code default constructor and getter/setter

public String viewBean(long ID){
    //set up a new beanA using ID argument and database call for the object beanA is based upon
    return "page2";
    }
}

Bean B(bean B具有基于bean A ID的属性)

@ManagedBean
@RequestScoped
public class BeanB implements Serializable{
private long beanAnumID;
private String name;

//code default constructor and getter/setter

public String saveBean(long beanAnumID)
    //save the beanB.name and beanAnumID in database
    return "page1";
    }
}

第1页(其中设置了Bean A的详细信息;假设bean A是从服务器中的数据库创建的,然后输入到页面中 - 在应用程序中,可以有几个用户可以选择的bean,这个bean的列表是从dataTable呈现的,显示beanA' s的列表:

[.xhtml page content]

<h:form>
    <h:commandLink action="#{beanA.viewBean(beanA.ID)}" value="#{beanA.name}" />
</h:form>

[.xhtml page content]

第2页(此页面允许用户命名bean B,然后在将表单发送回服务器后将其保留到DB):

[.xhtml page content]

<h:form>
    <h:inputText id="beanBName" value="#{beanB.name}" />
    <h:commandButton id="saveBean" action="#{beanB.saveBean(beanA.ID)}" value="Save Bean" />
</h:form>

[.xhtml page content]

我遇到的问题是,当我提交page2表单时,它会将commandButton操作中的beanA.ID视为空指针并且应用程序崩溃。我会认为它会在页面创建时将其呈现为一个值 - 我也尝试过它作为@ViewScoped并且它仍然无法正常运行。

这似乎应该有效;我在这里错过了什么吗?

感谢。

0 个答案:

没有答案