【问题标题】:lose view page parameter丢失视图页面参数
【发布时间】:2014-01-03 02:18:37
【问题描述】:

我有页面 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 中的参数值的情况下执行此操作吗?

【问题讨论】:

    标签: jsf jsf-2 parameters navigation


    【解决方案1】:

    h:button 可与 f:param 一起使用,但 h:commandButton 不能。在这种情况下,您最好将视图参数绑定到 bean 属性,正如您最后解释的那样。只要您调用 void 操作方法,@ViewScoped bean 就会保持其状态。

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

    另请参阅:

    【讨论】:

    • 那么在bean中不保存参数值就不行了?
    • 如果您的目标是在视图中保留该值,这就是视图范围的设计目的。作为一个有状态的 JSF 框架,您不需要在请求之间不断地将参数传递给服务器,只要您保持在同一个视图中,JSF 就会处理这些。当然,在其他情况下,您可能会对将参数传递给方法感兴趣(例如,当您想要处理表格行值时),但事实并非如此。
    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 2017-08-11
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    相关资源
    最近更新 更多