2013-01-17 14 views
5

मैं प्राइमफ़ेस <p:dialog> का उपयोग <p:commandButton> के साथ संयुक्त करने का प्रयास कर रहा हूं। मेरे .xhtml पेज में मेरे पास एक पिकलिस्ट और कमांड बटन है जिसका उपयोग एक संवाद दिखाने के लिए किया जाता है। डायलॉग पिकलिस्ट से लक्ष्य मूल्यों के साथ डेटाटेबल प्रदर्शित करता है। संवाद में दो बटन हैं: रद्द करें और जमा करें। मेरी समस्या यह है कि सबमिट बटन निकाल दिया नहीं जाता है। क्या अजीब बात है, कमांड बटन संवाद कार्यों से बाहर है।प्राइमफ़ेस संवाद + कमांड बटन

<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> 

मैं बटन काम चिह्नित की गई और एक काम नहीं कर रहा:

यहाँ मेरी .xhtml है। इसे काम करने के लिए मुझे क्या करना है?

+0

क्या आपने कंसोल को देखा है, यह अजाक्स कॉल नहीं कर रहा है? या यह बस काम नहीं कर रहा है? फ़ायरबग में देखने का प्रयास करें यदि यह सर्वर पर डेटा भेज रहा है, या AJAX फायरिंग है और विधि '# {editSkills.showSkillsAndLevels} 'बिल्कुल नहीं कहा जा रहा है? यह भी जांचें कि फ़ायरबग कोई जेएस त्रुटियां नहीं दिखा रहा है या नहीं। – Mindwin

+0

@ माइंडविन ऐसा लगता है कि इसे बिल्कुल नहीं कहा जा रहा है। कोई जेएस त्रुटियां भी नहीं देख पा रहे हैं। – AjMeen

उत्तर

17

आप निम्न में से या तो कोशिश कर सकते हैं, मैं नंबर एक वोट है, यह एक क्लीनर डिजाइन है IMO

  1. सामान्य <h:form/> की <p:dialog/> बाहर ले जाकर किसी <h:form/> अंदर यह बजाय

    <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> 
    
    डाल
  2. appendToBody="false"<p:dialog/> पर यह सुनिश्चित करने के लिए कि डीओएम इन्स में एचटीएमएल फॉर्म में संवाद प्रदान किया गया है एचटीएमएल बॉडी के अंत तक ऑटो-स्थानांतरित होने का टीड। लेकिन यह विभिन्न ब्राउज़रों में असंगत प्रतिपादन का कारण बन सकता है।

+0

आपके उत्तर के लिए धन्यवाद! मैंने जो किया है वह मैंने किया है, लेकिन अब मुझे यह त्रुटि मिल रही है: '/user/editSkills.xhtml @ 39,121 itemValue =" # {skill.id} ": वर्ग 'java.lang.String' संपत्ति 'आईडी' नहीं है। 'अजीब बात यह है कि मुझे लगता है कि यह पिकलिस्ट से जुड़ा हुआ है और यह अजीब है, क्योंकि पिकलिस्ट ठीक काम करती है। मुझे क्या करना चाहिए? – AjMeen

+0

@AjMeen, यह एक अलग मुद्दा है, शायद इस तथ्य के कारण कि '# {skill.id}' और '# {skilllevel.level}' समान डेटाटाइप नहीं हैं (उनमें से एक स्ट्रिंग है, दूसरा कुछ है अन्य)। लेकिन अब आपका कमांड बटन निश्चित रूप से फायरिंग कर रहा है। – kolossus

+0

'# {skilllevel.level} 'के पास इस त्रुटि से कोई लेना देना नहीं है, यहां तक ​​कि यदि मैं' skilsslevel' भाग को हटा देता हूं तो त्रुटि अभी भी दिखाई देती है। मुझे बस एक कनवर्टर की जरूरत है। वैसे भी मदद के लिए धन्यवाद! – AjMeen

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

' उपयोग करने के लिए जब यू widgetVar नाम फोन सुनिश्चित करें। आप तत्काल = "सत्य" या प्रक्रिया = "@ यह" भी उपयोग कर सकते हैं।

+0

आपको तत्काल = "सत्य" या प्रक्रिया = "@ यह" की आवश्यकता नहीं है। हालांकि आपके उत्तर में मुझे आवश्यक जानकारी की त्वरित जानकारी थी। धन्यवाद! – Eric

संबंधित मुद्दे