JSF2F:ajax生命周期问题

JSF2F:ajax生命周期问题,ajax,jsf,page-lifecycle,lifecycle,jsf-2,Ajax,Jsf,Page Lifecycle,Lifecycle,Jsf 2,问题是,如果在f:ajax请求期间更改了一个属性,并且应该根据更改的值新创建绑定的panelGroup,那么将使用旧值 这段代码将解释这个问题 下面是backingbean TestBean: public String getFirst() { return first; } public void setFirst(String first) { this.first = first; } public String getLa

问题是,如果在f:ajax请求期间更改了一个属性,并且应该根据更改的值新创建绑定的panelGroup,那么将使用旧值

这段代码将解释这个问题

下面是backingbean TestBean:

public String getFirst() {
        return first;
    }
    public void setFirst(String first) {
        this.first = first;
    }
    public String getLast() {
        return last;
    }
    public void setLast(String last) {
        this.last = last;
    }

    public String getName(){
        return first+" "+last; 
    }
public void setDynamicPanel(HtmlPanelGroup panel){ }

    public HtmlPanelGroup getDynamicPanel(){
        Application app = FacesContext.getCurrentInstance().getApplication();
        HtmlPanelGroup component = (HtmlPanelGroup)app.createComponent(HtmlPanelGroup.COMPONENT_TYPE);

        HtmlOutputLabel label1 = (HtmlOutputLabel)app.createComponent(HtmlOutputLabel.COMPONENT_TYPE);
        label1.setValue(" --> "+getFirst()+" "+getLast());
        component.getChildren().add(label1);
        return component;
    }
现在是jsf/facelet代码:

<h:form id="form">
    <h:panelGrid columns="1">
        <h:inputText id="first" value="#{testBean.first}" />
        <h:inputText id="last" value="#{testBean.last}" />
        <h:commandButton value="Show">
            <f:ajax execute="first last" render="name dyn" />
        </h:commandButton>
    </h:panelGrid>
    <h:outputText id="name" value="#{testBean.name}" />
    <h:panelGroup id="dyn" binding="#{testBean.dynamicPanel}" />
</h:form>

最初加载页面后,outputText和panelGroup将“null”显示为first和last。但按下按钮后,outputText会很好地更新,但panelgroup再次只显示“null”。这是由于“绑定方法”dynamicPanel在更新第一个和最后一个属性之前执行的问题


如何解决此行为或我的代码有什么问题?

如果将属性immediate=“true”添加到输入元素中,则这些值将在“应用请求值”阶段应用,因此在执行操作之前出现。您可能需要也可能不需要在commandButton上将immediate属性设置为true。

这有什么缺点吗?使用
immediate=“true”
是否会引入一些所需的额外技巧,或者是否会取消对某些东西X的支持?这意味着您将跳过对该输入的验证。如果需要更正“immediate”backingbean属性中的数据,这可能是不好的。例如,如果您想要要求输入元素是整数或类似的东西。