Предустановленное значение ‹p:selectOneRadio› внутри ‹p:dialog›

У меня проблема с установкой значения по умолчанию <p:selectOneRadio>. Я читал некоторые связанные темы, но я не смог найти ответ на свою проблему. Вот как это работает сейчас:

  1. Я установил значение в моем вспомогательном компоненте (имеющем область сеанса) после нажатия на <p:commandButton>, используя showLogEntryClassificationDlg().

    <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;" />
    

    Джава

    public void showLogEntryClassificationDlg(){
        mode = MODE.ADD;
        logEntryClassification = new LogEntryClassification();
        logEntryClassification.setLogEntryType(LogEntryType.LOG_ENTRY_CATEGORY);
        //some other code
    }
    
  2. Диалог отображается, но значение переключателя не выбрано. Я проверил геттер в резервном компоненте, и он возвращает правильное значение (но он вызывается несколько раз). Радиокнопка становится выбранной, когда я щелкаю в любом месте (!) В диалоговом окне (хотя геттер не вызывается).

    (почти) полный 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>
    

Я поставил <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>


person dodo    schedule 16.09.2014    source источник


Ответы (1)


Кажется, это ошибка праймейса. Когда <p:selectOneRadio> не является первым элементом формы, он работает. Но даже если это не первый элемент, когда вы фокусируетесь на нем (используя клавишу табуляции), он теряет выбор элемента. Если вы нажмете Tab еще раз, выбор вернется. На данный момент перед <p:selectOneRadio> я добавил <p:focus for=someId>, где someId — это inputText (второй элемент в <p:dialog>)

person dodo    schedule 17.09.2014