2013-02-14 82 views
0

我有一個帶有顯示(排序)項目的datgrid的小型jsf/primefaces應用程序。 現在我想在對話框中添加項目。爲什麼p:dialog不向bean提交值

  1. 我用按鈕單擊打開對話框。 - 作品
  2. 我想將對話框中的值提交給bean並更新數據網格。 如果我使用默認值(不是來自對話框),它的工作原理。該項目顯示在數據網格中,對話框關閉。這意味着。 -addItem功能可以運行 - 更新工作

但是,如果我想從該對話框中添加值,我得到一個空指針異常。所以我的值不會在bean中設置。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:p="http://primefaces.org/ui"> 
    <p:fieldset legend="Positionen" toggleable="true" toggleSpeed="500" styleClass="mbsFieldSet"> 
     <h:form id="form_positions"> 

     <p:growl id="messages" showDetail="true" /> 
     <!-- Add position mask --> 

     <!-- Button to open the open position mask --> 
     <p:commandButton id="btOpenAddPositionMask" value="Position via Dialog" onclick="dlg.show();"> 
     </p:commandButton> 

     <p:dataTable var="banfPosition" value="#{banfPositionBean.lsBanfPositions}" 
      id="tableBanfPositions" editable="true" > 
      <f:facet name="header">Positionen</f:facet> 

      <!-- AJAX Events for editing position values --> 
      <p:ajax event="rowEdit" listener="#{banfPositionBean.onEdit}" 
       update=":form_positions:messages"/> 

      <p:ajax event="rowEditCancel" listener="#{banfPositionBean.onCancel}" 
       update=":form_positions:tableBanfPositions" /> 


      <p:column headerText="Menge" style="width:50px"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{banfPosition.amount}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{banfPosition.amount}" style="width:100%" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 

      <p:column headerText="Matr./Lager-Nr." style="width:125px"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{banfPosition.stockNumber}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{banfPosition.stockNumber}" style="width:100%" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 
      <p:column headerText="Artikel" style="width:125px"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{banfPosition.article}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{banfPosition.article}" style="width:100%" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 


      <p:column headerText="Preis/Einheit" style="width:125px"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{banfPosition.price}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{banfPosition.price}" style="width:100%" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 
      <p:column headerText="Gesamtpreis" style="width:125px"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{banfPosition.sum}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{banfPosition.sum}" style="width:100%" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 
      <p:column headerText="Etat-Nr" style="width:125px"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{banfPosition.etat}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{banfPosition.etat}" style="width:100%" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 
      <p:column headerText="Anlagen-Nr" style="width:125px"> 
       <p:cellEditor> 
        <f:facet name="output"> 
         <h:outputText value="#{banfPosition.complex}" /> 
        </f:facet> 
        <f:facet name="input"> 
         <p:inputText value="#{banfPosition.complex}" style="width:100%" /> 
        </f:facet> 
       </p:cellEditor> 
      </p:column> 

      <p:column headerText="Ändern" style="width:20px; text-align:center"> 
       <p:rowEditor /> 
      </p:column> 
      <p:column headerText="Löschen" style="width:20px; text-align:center" > 
       <p:commandButton id="deletePos" actionListener="#{banfPositionBean.deletePos(banfPosition)}" 
       update=":form_positions:tableBanfPositions" ajax="true" icon="ui-icon ui-icon-close" iconPos="center" 
       title="Löscht den Eintrag in dieser Zeile." /> 
      </p:column> 
     </p:dataTable> 


     </h:form> 
    </p:fieldset> 

    <p:dialog header="Neue Position hinzufügen" widgetVar="dlg" 
     resizable="false"> 
     <h:panelGrid columns="2" style="margin-bottom:10px"> 

       <h:outputLabel value="Artikel:" /> 
       <p:selectOneMenu id="selectArticleForPosition" 
        value="#{banfPositionBean.selectedArticle}" var="art" 
        panelStyle="width:150px" style="width:260px" effect="fade" 
        filterMatchMode="starts" filter="true"> 
        <f:selectItems value="#{dataBean.lsArticle}" var="article" 
         itemLabel="#{article.name}" itemValue="#{article}" /> 
        <p:column> 
       #{art.id} - #{art.name} 
      </p:column> 
       </p:selectOneMenu> 
      </h:panelGrid> 

      <p:commandButton id="btAddPosition" value="Position einfügen" 
       actionListener="#{banfPositionBean.addPos()}" 
       update=":form_positions:tableBanfPositions" oncomplete="dlg.hide();" 
       ajax="true" process="@all" type="submit"> 
      </p:commandButton> 

    </p:dialog> 
</ui:composition> 

我嘗試將其與H:表單標籤,因爲它是在http://www.primefaces.org/showcase/ui/dialogForm.jsf顯示,但如果我添加此。

<p:dialog header="Neue Position hinzufügen" widgetVar="dlg" 
     resizable="false"> 
     <h:form id="form_dialog"> 
     <h:panelGrid columns="2" style="margin-bottom:10px"> 

       <h:outputLabel value="Artikel:" /> 
       <p:selectOneMenu id="selectArticleForPosition" 
        value="#{banfPositionBean.selectedArticle}" var="art" 
        panelStyle="width:150px" style="width:260px" effect="fade" 
        filterMatchMode="starts" filter="true"> 
        <f:selectItems value="#{dataBean.lsArticle}" var="article" 
         itemLabel="#{article.name}" itemValue="#{article}" /> 
        <p:column> 
       #{art.id} - #{art.name} 
      </p:column> 
       </p:selectOneMenu> 
      </h:panelGrid> 

      <p:commandButton id="btAddPosition" value="Position einfügen" 
       actionListener="#{banfPositionBean.addPos()}" 
       update=":form_positions:tableBanfPositions" oncomplete="dlg.hide();" 
       ajax="true" process="@all" type="submit"> 
      </p:commandButton> 
      </h:form> 
    </p:dialog> 

頁面重新加載但我的bean不會被調用。

有沒有人有一個想法我做錯了什麼? 感謝您的幫助。

------------------------------------------- * 編輯 * -------------------------------------------

我試着用p:inputText代替selectOneMenu來調用bean。

<p:dialog header="Neue Position hinzufügen" widgetVar="dlg" 
     resizable="false" appendToBody="true"> 
     <h:form id="form_dialog"> 
     <h:panelGrid columns="2" style="margin-bottom:10px"> 
       <h:outputLabel for="inputTxt" value="Artikel:" /> 
       <p:inputText id="inputTxt" value="#{banfPositionBean.testStr}"></p:inputText> 
      </h:panelGrid> 

      <p:commandButton id="btAddPosition" value="Position einfügen" 
       actionListener="#{banfPositionBean.addPos()}" 
       update=":form_positions:tableBanfPositions" oncomplete="dlg.hide();"> 
      </p:commandButton> 
     </h:form> 
    </p:dialog> 

所以我只是需要找出爲什麼它不會爲selectOneMenu工作。

+0

我忘了告訴我,我試着用appendToBody =「true」作爲對話框。 'code'的 \t ..'代碼' – BlackScorp21 2013-02-14 07:38:31

+0

當您使用'p:selectOneMenu'時,您是否在JavaScript控制檯中看到任何錯誤? – partlov 2013-02-14 09:08:02

+0

Firebug沒有錯誤。用於更新站點的部分僅有2文章:第一個'<部分響應> <更新ID = 「javax.faces.ViewState」> - 557081259120730458:-2882424255077078609 ''第二 ... <分機LN = 「primefaces」 類型= 「ARGS」> { 「validationFailed」:真} ' – BlackScorp21 2013-02-14 09:46:04

回答

0

首先我不知道什麼是屬性類型selectedArticle,我猜它是與article(在itemValue)屬性相同的類型。您應該定義轉換器或另一方面,您應該綁定valueselectOneMenuarticle.id的類型相同,並將itemValue設置爲#{article.id}

+0

我想你的權利。我用一個沒有轉換器的Java對象來測試它。我會證明它。 thx到目前爲止。 – BlackScorp21 2013-02-14 10:03:02

+0

thx @partlov與轉換器一起工作。 – BlackScorp21 2013-02-14 11:22:55