Primefaces <p:calendar> event =&#34; dateSelect&#34;不工作</p:calendar>

时间:2015-01-19 18:15:07

标签: ajax jsf primefaces jsf-2.2

无论我尝试什么,侦听器=“#{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,...

1 个答案:

答案 0 :(得分:0)

哦,发现它...似乎,消耗一个事件,只有一个(在我的情况下是第二个)响应它。

解决方案是我必须改变update =“”属性......