1

我有这个 f:viewParam 来设置值并在后面的 bean 中搜索:

<f:metadata>
<f:viewParam name="id"
    value="#{editorBean.id}"
    required="true" />
<f:event type="preRenderComponent"
    listener="#{editorBean.search}" />
...

回豆:

private String id; // getters setters

public void search(ComponentSystemEvent event) {


    if (id != null) {
            //search data in DB to construct TreeNode finBy(id)...
...

在浏览器中,我无法展开第二级树,因为在支持 Bean 中,id 为空..

在此处输入图像描述

调试:

在此处输入图像描述

如何在所有调用中设置 f:viewParam?

4

1 回答 1

3

这是因为<h:form>默认情况下提交到没有查询字符串的 URL。

要么将 bean 放在视图范围内,

@ManagedBean
@ViewScoped
public class EditorBean {

并在回发期间跳过 prerenderview

public void search(ComponentSystemEvent event) {   
    if (FacesContext.getCurrentInstance().isPostback()) {
        return;
    }

    // ...
} 

只要您与同一个视图交互,视图范围的 bean 就会存在,因此不需要一次又一次地初始化属性。

或者使用OmniFaces <o:form>,它提供了一个includeViewParams在表单操作 URL 中包含视图参数的属性:

<o:form includeViewParams="true">

也可以看看:

于 2013-05-24T12:26:26.130 回答