我在设置<p:selectOneRadio>
的默认值时遇到问题。我已经阅读了一些相关主题,但我无法找到问题的答案。它现在是如何运作的:
我使用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
}
显示对话框,但未选中单选按钮中的值。我在支持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>
我已将<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>
答案 0 :(得分:0)
这似乎是主要的错误。当<p:selectOneRadio>
不是表单上的第一个元素时,它就可以工作。但即使它不是第一个元素,当你专注于它(使用tab键)时,它会丢失项目选择。如果再次按Tab键,则返回选择。目前,在<p:selectOneRadio>
之前我添加了<p:focus for=someId>
someId
是inputText(<p:dialog>
中的第二个元素)