Jsf 带有命令按钮的参数

Jsf 带有命令按钮的参数,jsf,parameters,commandbutton,Jsf,Parameters,Commandbutton,我试图在两个页面之间导航,并将对象作为参数传递。调用方页面和目标页面使用相同的bean。我不想使用会话范围有几个原因,然后我使用ViewScoped 我的代码如下所示: <p:commandButton id="add" value="Insert new country" action="addcountry"> <f:setPropertyActionListener value="#{countryControllerBean.newCountry()}" t

我试图在两个页面之间导航,并将对象作为参数传递。调用方页面和目标页面使用相同的bean。我不想使用会话范围有几个原因,然后我使用ViewScoped

我的代码如下所示:

<p:commandButton id="add" value="Insert new country" action="addcountry">  
    <f:setPropertyActionListener value="#{countryControllerBean.newCountry()}" target="#{countryControllerBean.country}" />  
</p:commandButton>  
单击按钮,执行方法newCountry,初始化并返回一个新的对象country,但加载addcountry页面时,属性未初始化。如何在目标页面中获取国家/地区值

附言: 我知道我可以通过viewAction在目标页面上初始化country对象,如下所示:

<f:metadata>
    <f:viewAction action="#{countryControllerBean.newCountry()}" />
</f:metadata>
但是,我无法使用上一个视图中的值来初始化对象。

f:setPropertyActionListener将在该bean上设置值,但是,当您从该页面导航时,该bean将被销毁。当您进入目标页面时,您在上一页处理的country countryControllerBean已被销毁,您现在正在处理同一个bean的全新实例。您应该使用flash scope在页面之间传输值。您似乎误解了ViewScope-是否需要在单击按钮时创建对象?在我们的应用程序中,我们在类似的情况下使用传递的ID,但这只适用于可通过ID获取的持久化实体。