<p:dialog> </p:dialog> </p:selectoneradio>中<p:selectoneradio>的预设值

时间:2014-09-16 08:56:24

标签: jsf primefaces dialog selectoneradio

我在设置<p:selectOneRadio>的默认值时遇到问题。我已经阅读了一些相关主题,但我无法找到问题的答案。它现在是如何运作的:

  1. 我使用showLogEntryClassificationDlg()点击<p:commandButton>后,在我的支持bean(具有会话范围)中设置了值。

    <p:commandButton value="#{text['button.add']}" id="treeAdd"    
        styleClass="btn btn-primary" icon="fa fa-plus"
        actionListener="#{eventLogDetails.showLogEntryClassificationDlg()}"
        update=":logEntryClassificationDialogForm"
        oncomplete="PF('dlgLogEntryClassification').show(); return false;" />
    

    的java

    public void showLogEntryClassificationDlg(){
        mode = MODE.ADD;
        logEntryClassification = new LogEntryClassification();
        logEntryClassification.setLogEntryType(LogEntryType.LOG_ENTRY_CATEGORY);
        //some other code
    }
    
  2. 显示对话框,但未选中单选按钮中的值。我在支持bean中检查了getter,它返回了正确的值(但它被调用了几次)。当我在对话框中的任何地方(!)cilck时,单选按钮被选中(尽管没有调用getter)。

    (差不多)完整的xhtml文件:

    <html xmlns="http://www.w3.org/1999/xhtml"
        xmlns:c="http://java.sun.com/jsp/jstl/core"
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:p="http://primefaces.org/ui"
        xmlns:ui="http://java.sun.com/jsf/facelets"
        xmlns:o="http://omnifaces.org/ui">
    
        <ui:composition template="/layouts/default.xhtml">
        <ui:define name="title">#{text['eventLogDetail.title']}</ui:define>
        <ui:param name="menu" value="EventLogMenu" />
    
        <ui:define name="body">
            <h:outputScript name="jsf.js" library="javax.faces" target="head" />
    
            <h:form id="eventLogDetailsForm">
    
                //some code
    
                <div class="row">
                    <div class="col-md-12">
                        <div class="portlet">
                            <h4 class="portlet-title">
                                <u><i class="fa fa-sitemap"> </i>
                                    #{text['eventLogDetail.heading.classification']}</u>
                            </h4>
                            <div class="portlet-body">
                                <div class="row dt-rt">
                                    <div class="col-sm-12">
                                        <p:panel id="treeButtonPanel" styleClass="no-style-panel">
                                            <div class="btn-group">
    
                                                <p:commandButton value="#{text['button.add']}" id="treeAdd"
                                                    styleClass="btn btn-primary" icon="fa fa-plus"
                                                    actionListener="#{eventLogDetails.showLogEntryClassificationDlg}"
                                                    update=":logEntryClassificationDialogForm, :logEntryClassificationDialogForm:logEntryTypeRadioPanel"
                                                    oncomplete="PF('dlgLogEntryClassification').show(); return false;" />
    
                                                //other commandButtons
    
                                            </div>
                                        </p:panel>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </h:form>
    
        <!-- dialogs -->
            <p:dialog
                header="#{text['logEntry.logEntryClassification.add.title']}"
                widgetVar="dlgLogEntryClassification" appendTo="@(body)" modal="true"
                dynamic="true" height="300" resizable="false"
                styleClass="custom-popup-xs" id="logEntryClassificationDialog">
    
                <h:form id="logEntryClassificationDialogForm">
                    <o:resourceInclude path="/common/messages.jsp" />
    
                    <div class="row">
                        <div class="col-sm-12 form-group">
                        <p:panel id="logEntryTypeRadioPanel" styleClass="no-style-panel">
                            <p:selectOneRadio id="logEntryTypeRadio"
                                value="#{eventLogDetails.logEntryClassification.logEntryType}"
                                converter="LogEntryTypeConverter">
                                <f:selectItem itemLabel="Kategoria zdarzeń"
                                    itemValue="LOG_ENTRY_CATEGORY" />
                                <f:selectItem itemLabel="Rodzaj zdarzenia"
                                    itemValue="LOG_ENTRY_TYPE" />
                            </p:selectOneRadio>
                            </p:panel>
                        </div>
                    </div>
    
                //some code
    
                </h:form>
            </p:dialog>
    
        </ui:define>
        </ui:composition>
    </html>
    
  3. 我已将<p:selectOneRadio>置于<p:panel>内并尝试更新:logEntryClassificationDialogForm:logEntryTypeRadioPanel,但结果相同。

    编辑: 我测试了一些东西,也许这是某种形式的错误: 只有在我尝试设置第一个项目时才会起作用。在我在开头添加了一个项目后,选择该项目(如下所示)。有什么想法吗?

    <f:selectItem itemLabel="Rodzaj zdarzenia" itemValue="LOG_ENTRY_TYPE" />
    <f:selectItem itemLabel="Kategoria zdarzeń" itemValue="LOG_ENTRY_CATEGORY" />
    <f:selectItem itemLabel="Rodzaj zdarzenia" itemValue="LOG_ENTRY_TYPE" />
    

    适用于<h:selectOneRadio>,但我需要使用<f:selectOneRadio>

1 个答案:

答案 0 :(得分:0)

这似乎是主要的错误。当<p:selectOneRadio>不是表单上的第一个元素时,它就可以工作。但即使它不是第一个元素,当你专注于它(使用tab键)时,它会丢失项目选择。如果再次按Tab键,则返回选择。目前,在<p:selectOneRadio>之前我添加了<p:focus for=someId> someId是inputText(<p:dialog>中的第二个元素)