时间:2013-05-24 12:18:34

标签: java jsf primefaces

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

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

Back bean:

private String id; // getters setters
private TreeNode root; // getters setters

public void search(ComponentSystemEvent event) {


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

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

enter image description here

调试:

enter image description here

如何f:在所有通话中设置viewParam?

1 个答案:

答案 0 :(得分:1)

这是因为<h:form>默认提交给没有查询字符串的网址。

将bean放在视图范围中,

@ManagedBean
@ViewScoped
public class EditorBean {

并在回发期间跳过prerenderview

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

    // ...
} 

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

或者使用提供includeViewParams属性的OmniFaces <o:form>在表单操作网址中包含视图参数:

<o:form includeViewParams="true">

另见: