Jsf f:viewParam在ajax调用后丢失

Jsf f:viewParam在ajax调用后丢失,jsf,viewparams,Jsf,Viewparams,我有这个f:viewParam来设置值并在视图中的backbean中进行搜索: <f:metadata> <f:viewParam name="id" value="#{editorBean.id}" required="true" /> <f:event type="preRenderComponent" listener="#{editorBean.search}" /> ... 在浏览器中,我无法展开树的第二级,因为在backi

我有这个f:viewParam来设置值并在视图中的backbean中进行搜索:

<f:metadata>
<f:viewParam name="id"
    value="#{editorBean.id}"
    required="true" />
<f:event type="preRenderComponent"
    listener="#{editorBean.search}" />
...
在浏览器中,我无法展开树的第二级,因为在backingbean中,id为null

调试:


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

这是因为默认情况下,
提交到没有查询字符串的URL

要么将bean放入视图范围

@ManagedBean
@ViewScoped
public class EditorBean {
并在回发过程中跳过预渲染视图

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

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

或者使用提供了
includeViewParams
属性的属性在表单操作URL中包含视图参数:


另见:

我用的是春豆。视图范围不存在,请选择其他选项。@BalusC:如标题所述,它发生在第二次调用之后,这有意义吗?逻辑和您的回答让我认为它发生在第一次ajax调用之后,或者更确切地说发生在第一次ajax调用期间。我将创建一个测试用例,但是已经有了这种行为。标题是偶然错误的还是在早期可能是这样的,而我们现在看到的行为更符合逻辑?@Kukeltje:你是对的,标题模棱两可。OP的意思可能是“在第二次请求之后”。当您正常打开页面,然后对其进行回发时,就会发生这种情况。@BalusC:似乎原始标题是正确的,我在Mojarra 2.3.9SP02(Wildfly 16)上尝试过,在第一次ajax调用中,它确实没有被传输,但。。。。设定者被称为。我目前正在检查它是否与相关,以及此中引用的是否被引用。我正在检查它是否相关,但也许你知道。
public void search(ComponentSystemEvent event) {   
    if (FacesContext.getCurrentInstance().isPostback()) {
        return;
    }

    // ...
}