PrimeFaces SelectOneMenu ajax rendering



我的程序出了什么问题?我觉得一切都很好。我的changeKeyValue方法获取所选值"REFERENCE",并将true布尔值设置为showReference。但是,如果在p:ajax中使用update="targetPanel",则我的页面无法呈现h:panelGroup。当我使用update="entryForm"时,它可以渲染h:panelGroup

我缺少什么

mypage.xhtml

<h:form id="entryForm">
        <p:selectOneMenu value="#{MyBean.keyFactorValue}" required="true" style="width:257px;" id="keyFactorValue">
            <f:selectItems value="#{MyBean.selectItemList}" var="type" itemLabel="#{type.label}" itemValue="#{type}"/>  
            <p:ajax listener="#{MyBean.changeKeyValue}" update="targetPanel" event="change"/>
        </p:selectOneMenu>
        <h:panelGroup id="targetPanel" rendered="#{MyBean.showReference}">
            .......
        </h:panelGroup>
</h:form>

KeyFactorValue.java

public enum KeyFactorValue {
    REFERENCE("Reference"), FORM_TO("From-To"), FIXED("Fixed");
    private String label;
    private KeyFactorValue(String label) {
        this.label = label;
    }
    public String getLabel() {
        return label;
    }
}

MyBean.java

@Scope(ScopeType.CONVERSATION)
@Name("MyBean")
public class MyBean {
    private boolean showReference;
    public boolean isShowReference() {
        return showReference;
    }
    public KeyFactorValue[] getSelectItemList() {
        return KeyFactorValue.values();
    }
    public void changeKeyValue(AjaxBehaviorEvent e) {
        KeyFactorValue type = keyFactor.getKeyFactorValue();
        System.out.println("Selected KeyFactorValue : " + type);
        switch(type) {
            case REFERENCE :{
                showReference = true;
                break;
            }
            default :{
                showReference = false;
                break;
            }
        }
    }
}

您不能用ajax更新HTML中的一个元素,而这个元素不是由JSF呈现的。JavaScript(ajax背后的代码)无法通过document.getElementById()找到它来替换其内容。

您只能用ajax更新HTML中的一个元素,这个元素总是由JSF呈现的。将有条件渲染的组件封装在另一个始终渲染的组件中,然后ajax对其进行更新。

<h:panelGroup id="targetPanel">
    <h:panelGroup rendered="#{MyBean.showReference}">
        ...
    </h:panelGroup>
</h:panelGroup>

另请参阅:

  • 为什么我需要嵌套具有rendered="rendered"的组件#{some}";在另一个组件中,当我想用ajax更新它时

相关内容

  • 没有找到相关文章

最新更新