【问题标题】:PrimeFaces SelectOneMenu ajax renderingPrimeFaces SelectOneMenu ajax 渲染
【发布时间】:2013-02-15 09:29:24
【问题描述】:

我的程序出了什么问题?我认为一切都很好。我的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;
            }
        }
    }

}

【问题讨论】:

    标签: java jsf primefaces


    【解决方案1】:

    您不能对不是由 JSF 呈现的 HTML 中的元素进行 ajax 更新。 JavaScript(ajax 背后的代码)无法通过document.getElementById() 找到它以替换其内容。

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

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

    另见:

    【讨论】:

      猜你喜欢
      • 2016-04-26
      • 2012-08-29
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2015-04-25
      • 2016-02-20
      • 1970-01-01
      • 2014-11-13
      相关资源
      最近更新 更多