我有页面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中没有保存参数值吗?
答案 0 :(得分:1)
h:button
适用于f:param
,但h:commandButton
却不适用。在这种情况下,最好的方法是在解释最后一个时将view参数绑定到bean属性。只要您调用@ViewScoped
操作方法,void
bean就会保留其状态。
您也可以将它作为参数传递给action方法(有几种方法可以做到这一点),但这对于与该值无关的方法没有意义。
另见: