【发布时间】:2014-03-07 14:52:53
【问题描述】:
我有一个页面,我通过 p:commandButton 打开一个对话框。当没有为 p:pickList 设置转换器属性时一切正常,但是当它是对话框拒绝打开时。
这里是 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>
和 bean EventBean(仅相关部分):
@ManagedBean
@ViewScoped
public class EventBean {
public EventBean() {
converter = new PersonConverter(#list of persons);
}
public PersonConverter getPersonConverter() {
return converter;
}
}
我不明白为什么它不能与转换器一起工作,它在另一个页面中应该做的。
【问题讨论】:
-
1.不要像现在一样尝试自己管理转换器(调用
new等)。适当地定义一个独立的转换器和引用。 2. 查看您的 javascript 控制台。如果网页上缺少任何转换错误,它会在控制台中 -
我假设独立您的意思是将其定义为 @FacesConverter 并且每次加载列表对我来说似乎都是糟糕的设计,或者不是吗?我不知道您所说的 javascript 控制台是什么意思,但除了 pickList 之外,转换器工作正常。
-
你是对的,你不应该每次都实例化一个列表。最佳实践是通过 DAO 将列表注入转换器。 Javascript 控制台是指浏览器中的开发者控制台。大多数现代浏览器都在“开发者工具”菜单下提供此功能。
标签: java jsf primefaces dialog converter