丢失视图页面参数



我有页面我的.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>

和豆.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 中的情况下执行此操作吗?

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

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

另请参阅:

  • 将参数传递给 JSF 中的操作方法
  • JSF 中的通信

相关内容

  • 没有找到相关文章

最新更新