Ajax更新不起作用

时间:2011-10-19 15:32:01

标签: ajax jsf primefaces

为什么#{uImanager.select}永远不会更新?

<p:panel id="EditDetailsPanel" header="Edit Details">
    <h:panelGrid columns="2" cellpadding="5">
        <h:outputLabel value="Simple :" />
        <h:selectOneMenu value="#{uImanager.select}">
            <f:selectItem itemValue="val1" itemLabel="Coffee1" />
            <f:selectItem itemValue="val2" itemLabel="Coffee2" />
            <f:selectItem itemValue="val3" itemLabel="Coffee3" />                                  
        </h:selectOneMenu>
    </h:panelGrid>
    <p:commandButton value="Submit" update="EditDetailsForm:EditDetailsPanel"/>
    #{uImanager.select}
</p:panel> 

它指向带有getter和setter的private String Select;。它在会话范围的托管bean中定义。

1 个答案:

答案 0 :(得分:1)

因为您的update属性可能指向无效的客户端ID。如果您注意了服务器日志,那么您应该看到PrimeFaces中的以下内容:

INFO: Cannot find component with identifier "EditDetailsForm:EditDetailsPanel" in view.

由于<p:panel>位于与<p:commandButton>本身相同的UINamingContainer父级内(至少根据您目前发布的代码),您可以指定其相对客户ID:

<p:commandButton value="Submit" update="EditDetailsPanel"/>

或者,如果您坚持指定绝对客户端ID,则需要在其前面添加:

<p:commandButton value="Submit" update=":EditDetailsForm:EditDetailsPanel"/>

请注意,这只适用于<h:form>本身没有其他UINamingContainer父级的情况。在浏览器中打开页面,右键单击查看源以查看生成的HTML元素ID。最后,您需要获取该值,前缀为: