我有一個單一選擇的數據表。選擇一行並按下按鈕後,將顯示帶有輸入文本的對話框並選擇一個菜單。輸入文本和一個菜單應包含所選行的數據。通常,它是一個用於編輯數據表中記錄的對話框。 但是,在對話框中選擇一個菜單將不會更改基於選定行的默認值。它與<h:selectOneMenu>
一起使用,但不是從Primefaces <p:selectOneMenu>
擴展而來的。我做錯了什麼? 我正在使用Primefaces 5.0和JSF 2.1。Primefaces SelectOneMenu不更新默認值
XHTML:
<h:form id="form">
<p:dataTable
id="datatable"
var="spec"
value="#{selectionRowAction.specimensBO.list}"
selection="#{selectionRowAction.selectedSpecimen}"
selectionMode="single"
rowKey="#{spec.id}"
resizableColumns="true">
<f:facet name="header">
<p:commandButton id="editButton"
process="datatable"
update=":form:editPanel"
icon="ui-icon-pencil"
oncomplete="PF('dlg').show()"/>
</f:facet>
<p:column headerText="ID" >
<h:outputText value="#{spec.subjectIdNumber}" />
</p:column>
<p:column headerText="Type" >
<h:outputText value="#{spec.specimenType.displayText}" />
</p:column>
</p:dataTable>
<p:dialog widgetVar="dlg" >
<p:outputPanel id="editPanel" >
<p:panelGrid columns="2">
<h:outputText value="ID: "/>
<p:inputText
value="#{selectionRowAction.selectedSpecimen.subjectIdNumber}"/>
<h:outputText value="Type: " />
<p:selectOneMenu
value="#{selectionRowAction.selectedSpecimen.specimenType}"
converter="#{specimenTypeConverter}">
<f:selectItem itemLabel="Select One"/>
<f:selectItems value="#{basicSelectionsBO.specimenTypes}"
var="type"
itemLabel="#{type.displayText}"
itemValue="#{type}"/>
</p:selectOneMenu>
</p:panelGrid>
</p:outputPanel>
</p:dialog>
</h:form>
你對類SpecimenType有equals()和hashCode()嗎? –
@ JaqenH'ghar感謝您的回覆。 SpecimenType是包含getter和setter屬性的數據模型類。我應該重寫'equals()'和'hashCode()'方法嗎? – PrincAm
我不確定,但我認爲它是一個要求..當selectmenus給出問題時,它通常是由這個或轉換器引起的。對於實現請參閱BalusC的答案在這裏:http://stackoverflow.com/questions/10726716/primefaces-selectonemenu-doesnt-working-when-it-should –