Jsf 无法查看页面参数

Jsf 无法查看页面参数,jsf,jsf-2,parameters,navigation,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

我有一个页面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>
当我第一次进入id=10的页面时,我可以在
页面上看到当前id是:“10”。
。 当我点击按钮时,页面是重新加载的,我可以在
页面上看到当前id是:“10”。
再次

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

我知道我可以在bean中保存参数值 (通过添加到
f:viewParam

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


h:button
f:param
一起工作,但
h:commandButton
不起作用。在这种情况下,最好是在解释上一步时将视图参数绑定到bean属性。
@ViewScoped
bean将保持其状态,只要调用
void
操作方法

您也可以将其作为参数传递给action方法(有几种方法可以实现),但对于与该值无关的方法来说,这没有意义

另请参见:


因此,如果不在bean中保存参数值,它就无法工作?如果您的目标是在视图中保留该值,那么视图作用域就是为此而设计的。由于JSF是一个有状态的框架,您不需要在请求之间不断向服务器传递参数,只要您保持在同一个视图中,JSF就会解决这个问题。当然,在其他c中因此,您可能对将参数传递给方法感兴趣(例如,当您想要处理表行值时),但事实并非如此。
<f:metadata>
  <f:viewParam name="id" value="#{bean.value}/>
</f:metadata>