我有一個頁面,我可以通過p:commandButton打開一個對話框。如果沒有爲p:pickList設置converter-attribute,但是當對話框拒絕打開時,一切正常。轉換器屬性設置時PrimeFaces不打開對話框
這裏是XHTML(僅適用於相關的部分):
<p:dialog id="dialog" widgetVar="eventDialog" resizable="false" header="Event">
<h:form>
<p:panelGrid id="eventPanel" columns="2">
<h:outputLabel value="Participants" />
<p:pickList id="participants" value="#{eventBean.dualList}" var="person"
itemValue="{person}" showCheckbox="true"
converter="#{eventBean.personConverter}" showSourceFilter="true"
showTargetFilter="true" filterMatchMode="contains"
itemLabel="#{person.name}, #{person.forename}" />
<f:facet name="sourceCaption">Personen</f:facet>
<f:facet name="targetCaption">Participant</f:facet>
<p:commandButton value="Save" icon="ui-icon-disk"
action="#{eventBean.saveEvent()}" onsuccess="eventDialog.hide()"
update="@all" ajax="false" />
</p:panelGrid>
</h:form>
</p:dialog>
<h:form id="eventForm">
<p:commandButton value="Create Event" action="#{eventBean.createEvent()}"
oncomplete="eventDialog.show()" update=":dialog" styleClass="spaceBottom2" />
</h:form>
和豆EventBean(僅相關部分):
@ManagedBean
@ViewScoped
public class EventBean {
public EventBean() {
converter = new PersonConverter(#list of persons);
}
public PersonConverter getPersonConverter() {
return converter;
}
}
我想不通爲什麼它是行不通的與轉換器,它做它應該在另一個頁面。
1.不要試圖像現在這樣管理轉換器(調用'new'等)。適當地定義一個獨立的轉換器和參考。 2.看看你的JavaScript控制檯。如果您在網頁上發現任何轉換錯誤,它將出現在控制檯 – kolossus
中,我假設您將其定義爲@FacesConverter,並且每次加載列表對我來說似乎都是不好的設計,或者是它不是? 我不知道你是什麼意思的JavaScript控制檯,但除了pickList轉換器工作正常。 – Rosty
你是對的,你不應該每次都實例化一個列表。最佳做法是通過DAO將清單注入轉換器。通過Javascript控制檯,我的意思是你的瀏覽器中的開發者控制檯。大多數現代瀏覽器都在「開發人員工具」菜單下提供。 – kolossus