丢失视图页面参数

时间:2014-01-03 02:18:38

标签: jsf jsf-2 parameters navigation

我有页面my.xhtml:

<f:metadata>
  <f:viewParam name="id"/>
</f:metadata>
...
<h:form>
  Current id is: "#{id}"

  <h:commandButton action="#{bean.doSomething}" value="Do some logic..">
     <f:param name="id" value="#{id}"/>
  </h:commandButton>
</h:form>

和Bean.java:

@ManagedBean
@ViewScoped
public class Bean {
   ....
   public void doSomething(){
     //do some logick, don't use id parameter
   }
}

当我第一次登录id = 10时,我可以在页面Current id is: "10".上看到。 当我点击按钮页面重新加载时,我可以再次在页面Current id is: "10".上看到。

但是当我第三次点击按钮时,我可以在页面Current id is: "".上看到,我丢失id参数,我不明白为什么?

我知道我可以在bean中保存参数值 (加上f:viewParam

<f:metadata>
  <f:viewParam name="id" value="#{bean.value}/>
</f:metadata>

),但我可以在bean中没有保存参数值吗?

1 个答案:

答案 0 :(得分:1)

h:button适用于f:param,但h:commandButton却不适用。在这种情况下,最好的方法是在解释最后一个时将view参数绑定到bean属性。只要您调用@ViewScoped操作方法,void bean就会保留其状态。

您也可以将它作为参数传递给action方法(有几种方法可以做到这一点),但这对于与该值无关的方法没有意义。

另见:

相关问题