2013-01-17 20 views
5

<p:commandButton> ile birleştirilen primefaces <p:dialog> kullanmaya çalışıyorum. .xhtml sayfamda, bir iletişim listesini göstermek için kullanılan bir seçim listesi ve commandButton'um var. Dialog, listeden hedef değerlerle datatable görüntüler. İletişim kutusunun iki düğmesi vardır: iptal et ve gönder. Benim sorunum, gönder düğmesine basılmamasıdır. Garip olan, iletişim kutusundan çıkan komutButton. Düğmeye çalışma ve bir çalışmıyor işaretli ettikPrimefaces dialog + commandButton

<body> 
    <ui:composition template="./../resources/mainTemplate.xhtml"> 
     <ui:define name="content"> 
      <h:form> 
       <p:dialog id="dlg" header="#{messages.chooseSkillLevel}" widgetVar="dlg" modal="true" dynamic="true"> 
        <h:dataTable value="#{editSkills.skillsAndLevels}" var="skillslevel"> 
         <h:column> 
          #{skillslevel.skill.umiejetnosc} 
         </h:column> 
         <h:column> 
          <p:selectOneMenu value="#{skillslevel.level}" > 
           <f:selectItems value="#{editSkills.levels}" var="level" itemLabel="#{level.stopien}" itemValue="#{level.id}" /> 
          </p:selectOneMenu> 
         </h:column> 
        </h:dataTable> 
        <p:commandButton value="#{messages.confirm}" action="#{editSkills.showSkillsAndLevels}" oncomplete="dlg.hide();" /> THIS BUTTON IS NOT FIRED 
        <p:commandButton value="#{messages.cancel}" onclick="dlg.hide()"/> 
       </p:dialog> 
       <p:pickList value="#{editSkills.skills}" var="skill" effect="none" 
       itemValue="#{skill.id}" itemLabel="#{skill.umiejetnosc}" 
       showSourceFilter="true" showTargetFilter="true" filterMatchMode="contains" 
       addLabel="#{messages.add}" removeLabel="#{messages.remove}" removeAllLabel="#{messages.removeAll}" > 
        <f:facet name="sourceCaption">#{messages.skillsList}</f:facet> 
        <f:facet name="targetCaption">#{messages.yourSkills}</f:facet> 
        <p:ajax event="transfer" listener="#{editSkills.onTransfer}" /> 
        <p:column style="width:100%;"> 
         #{skill.umiejetnosc} 
        </p:column> 
       </p:pickList> 
       <p:commandButton value="#{messages.confirm}" action="#{editSkills.afterSubmit}" update="dlg" oncomplete="dlg.show()" /> THIS BUTTON WORKS FINE 
       <p:commandButton value="#{messages.cancel}" action="profile" immediate="true"/> 
      </h:form> 
     </ui:define> 
    </ui:composition> 
</body> 

:

İşte benim .xhtml bu. Çalışmak için ne yapmalıyım?

+0

Konsola baktınız mı, ajax araması yapmıyor mu? ya da sadece çalışmıyor mu? Veriyi sunucuya gönderiyorsa ya da AJAX ateşlemesi ve '# {editSkills.showSkillsAndLevels}' yöntemi hiç çağrılmıyorsa firebug'a bakmayı deneyin. Ayrıca, firebug'ın herhangi bir JS hatası gösterip göstermediğini de kontrol edin. – Mindwin

+0

@Mindwin, hiç çağrılmıyor gibi görünüyor. Herhangi bir JS hatası göremiyorum. – AjMeen

cevap

17

Sen IMO

  1. genel <h:form/> ait <p:dialog/> dışında getir, daha temiz bir tasarım değil, ben bir numara oy aşağıdakilerden birini deneyebilirsiniz ve

    <p:dialog id="dlg" header="#{messages.chooseSkillLevel}" widgetVar="dlg" modal="true" dynamic="true"> 
         <h:form> 
          <h:dataTable value="#{editSkills.skillsAndLevels}" var="skillslevel"> 
           <h:column> 
            #{skillslevel.skill.umiejetnosc} 
           </h:column> 
           <h:column> 
            <p:selectOneMenu value="#{skillslevel.level}" > 
             <f:selectItems value="#{editSkills.levels}" var="level" itemLabel="#{level.stopien}" itemValue="#{level.id}" /> 
            </p:selectOneMenu> 
           </h:column> 
          </h:dataTable> 
          <p:commandButton value="#{messages.confirm}" action="#{editSkills.showSkillsAndLevels}" oncomplete="dlg.hide();" /> THIS BUTTON IS NOT FIRED 
          <p:commandButton value="#{messages.cancel}" onclick="dlg.hide()"/> 
          </h:form> 
         </p:dialog> 
    
    yerine içinde bir <h:form/>koymak
  2. İletişim kutusunun, DOM öğelerinde html formunda oluşturulduğundan emin olmak için <p:dialog/>'a appendToBody="false" ekleyin. HTML gövdesinin sonuna otomatik olarak yerleştirilmek yerine. Ancak bu çeşitli tarayıcılarda tutarsız görüntülemeye neden olabilir.

+0

Cevabınız için teşekkürler! Yapmamı istediğini yaptım ama şimdi şu hatayı alıyorum: '/user/editSkills.xhtml @ 39,121 itemValue =" # {skill.id} ": 'java.lang.String' sınıfı 'id' özelliğine sahip değil. 'Garip olan şey, bunun seçim listesiyle bağlantılı olduğunu düşünüyorum ve garip, seçim listesi iyi çalışıyor. Ne yapmalıyım? – AjMeen

+0

@AjMeen, muhtemelen, # # {skill.id} ve # # {skilllevel.level} 'in aynı veri türü olmadığından (yani bunlardan biri dizgeden, diğerinin Başka). Ama şimdi komuta manton kesinlikle ateş ediyor. – kolossus

+0

'# {Becerilerlevel.level}' bu hata ile ilgisi yoktur, çünkü 'skilsslevel' parçasını kaldırsam bile hata hala gelir. Sadece bir dönüştürücüye ihtiyacım var. Neyse yardım için teşekkürler! – AjMeen

4
<p:commandButton value="Cancel" oncomplete="PF('yourDialogWidgedVarName').hide();" process="@this" /> 

u widgetVar çağırdıklarındazamanını ' kullandığınızdan emin olun. Hemen = "true" veya process = "@ this" komutunu da kullanabilirsiniz.

+0

derhal = "true" veya process = "@ this" gerekmemelidir. Ancak, cevabınız ihtiyacım olan hızlı bilgi içeriyordu. Teşekkürler! – Eric