无论我尝试什么,侦听器=“#{aufwandDayEditController.initAufwaendeJeTag}”中的event =“dateSelect”都永远不会被调用。
这里是facelet:
<h:head>
<title>Aufwand je Tag erfassen</title>
<h:outputStylesheet name="css/style.css" />
</h:head>
<h:body>
<h:form id="form">
<ui:include src="/common/menu.xhtml"/>
<p:panel id="panel" header="Aufwand je Tag" style="width: 800px">
<p:panelGrid id="attribute" columns="2">
<p:outputLabel for="mitarbeiter" value="Mitarbeiter:"/>
<p:selectOneMenu id="mitarbeiter"
value="#{aufwandDayEditController.mitarbeiter}"
editable="false"
effect="fade"
converter="#{mitarbeiterConverter}"
required="true"
requiredMessage="Mitarbeiter muss angegeben werden!">
<f:selectItems value="#{aufwandDayEditController.mitarbeiterSelectItems}"/>
<p:ajax listener="#{aufwandDayEditController.initAufwaendeJeTag}"
update="aufwaende"/>
<p:ajax update="addRow"/>
</p:selectOneMenu>
<p:outputLabel for="tag"
value="Tag:"/>
<p:calendar id="tag"
value="#{aufwandDayEditController.tag}"
required="true"
requiredMessage="Tag muss angegeben werden!"
locale="de"
navigator="true"
yearRange="c-10:c+10">
<p:ajax event="dateSelect"
listener="#{aufwandDayEditController.initAufwaendeJeTag}"
update="aufwaende"/>
<p:ajax event="dateSelect"
update="addRow"/>
</p:calendar>
<p:outputLabel value="Aufwände:"
for="aufwaende"/>
<p:dataTable id="aufwaende"
var="aufwand"
value="#{aufwandDayEditController.aufwaendeJeTag}"
sortBy="#{aufwand.aktivitaet}"
rendered="#{aufwandDayEditController.aufwaendeJeTag != null}"
editable="true"
editMode="row"
resizableColumns="true">
<f:facet name="header">Aufwände</f:facet>
<p:ajax event="rowEdit"
listener="#{aufwandDayEditController.onRowEdit}"
update=":form:message"/>
<p:ajax event="rowEditCancel"
listener="#{aufwandDayEditController.onRowEditCancel}"
update=":form:message"/>
<p:column headerText="Aktivität" style="vertical-align: middle;" resizable="true">
<p:cellEditor>
<f:facet name ="output">
<h:outputText value="#{aufwand.aktivitaet.toString()}"/>
</f:facet>
<f:facet name="input">
<p:selectOneMenu value="#{aufwand.aktivitaet}"
editable="false"
effect="fade"
converter="#{aktivitaetConverter}"
required="true"
requiredMessage="Projektaktivität muss angegeben werden!"
style="width:70%; line-height: 85%; text-align: left">
<f:selectItems value="#{aufwandDayEditController.aktivitaetSelectItems}"/>
</p:selectOneMenu>
</f:facet>
</p:cellEditor>
</p:column>
<p:column headerText="Aufwand [pH]" style="vertical-align: middle;" resizable="true">
<p:cellEditor>
<f:facet name="output">
<h:outputText value="#{aufwand.menge}"/>
</f:facet>
<f:facet name="input">
<p:inputText id="menge"
value="#{aufwand.menge}"/>
</f:facet>
</p:cellEditor>
</p:column>
<p:column resizable="true">
<p:rowEditor />
</p:column>
</p:dataTable>
<p:outputLabel/>
<p:commandButton id="addRow"
icon="add"
title="Neue Zeile"
value="Neue Zeile"
actionListener="#{aufwandDayEditController.onAddRow}"
update="aufwaende"
disabled="#{aufwandDayEditController.mitarbeiter == null or aufwandDayEditController.tag == null}"/>
</p:panelGrid>
<p:growl id="message" showDetail="true" showSummary="false"/>
</p:panel>
<p:commandLink value="Zurück"
immediate="true"
action="#{aufwandDayEditController.back()}"/>
</h:form>
</h:body>
</html>
这里是相关控制器的有趣部分:
public void initAufwaendeJeTag(Object dummy) {
initAufwaendeJeTag();
}
public void initAufwaendeJeTag() {
if (mitarbeiter != null && tag != null) {
aufwaendeJeTag = aufwandFacade.findByDay(mitarbeiter, tag);
}
else {
aufwaendeJeTag = new LinkedList<>();
}
}
请注意,没有参数的侦听器从组件id =“mitarbeiter”完全调用,但它们都不是从组件id =“tag”调用的。正常工作,因为value =“#{aufwandDayEditController.tag}”已更新......
使用调试器检查...
有任何帮助吗?
我正在使用PrimeFaces 5.1,NetBeans 8.0.1,...
答案 0 :(得分:0)
哦,发现它...似乎,消耗一个事件,只有一个(在我的情况下是第二个)响应它。
解决方案是我必须改变update =“”属性......