У меня проблема с установкой значения по умолчанию <p:selectOneRadio>
. Я читал некоторые связанные темы, но я не смог найти ответ на свою проблему. Вот как это работает сейчас:
Я установил значение в моем вспомогательном компоненте (имеющем область сеанса) после нажатия на
<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 }
Диалог отображается, но значение переключателя не выбрано. Я проверил геттер в резервном компоненте, и он возвращает правильное значение (но он вызывается несколько раз). Радиокнопка становится выбранной, когда я щелкаю в любом месте (!) В диалоговом окне (хотя геттер не вызывается).
(почти) полный 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>