2011-05-30 17 views
5

पर काम नहीं कर रहा है मेरे पास कुछ टैब के साथ p:wizard है। पहले टैब में, उपयोगकर्ता एक मान का चयन करता है (टी :selectOneRadio - मैं टॉमहॉक का उपयोग कर रहा हूं)। यह एक आवश्यक मूल्य है।प्राइमफेस 'पी: विज़ार्ड सत्यापन

यदि उपयोगकर्ता कोई मान नहीं चुनता है, तो यह अगले टैब पर नहीं जाएगा, लेकिन कोई सत्यापन त्रुटि प्रदर्शित नहीं होती है। हम्म।

यदि उपयोगकर्ता ने कोई मान चुना है, तो अगले टैब पर जाता है, पहले टैब पर वापस जाता है और एक अलग मान चुनता है, तो ऐसा व्यवहार करेगा जैसे इस समय कोई मूल्य नहीं चुना गया था। (या तो कोई सत्यापन त्रुटि नहीं है, लेकिन दूसरा टैब नहीं लगाया जा सकता है)।

और इससे भी बदतर: उपयोगकर्ता पहले टैब में एक मान चुनता है, दूसरे टैब पर जाता है, वहां से एक क्रिया का आह्वान करता है ... एक सत्यापन संदेश प्रकट होता है; यह कार्य करता है जैसे कि पहले टैब में कोई मान नहीं चुना गया था।

क्या इसके लिए कोई स्पष्टीकरण है?

अद्यतन

PrimeFaces मंच मेरे लिए काम किया में समाधान suggested। (प्रक्रिया = "@ यह" कमांड बटन पर जोड़ना।)

उत्तर

4

अद्यतन

PrimeFaces मंच मेरे लिए काम किया में समाधान suggested। (को commandButton पर जोड़ना।) कोई विचार नहीं क्यों, हालांकि!

2

ऐसा लगता है कि यह कुछ संभावित मुद्दों में से एक हो सकता है। आपको सत्यापन त्रुटि मिल रही है हालांकि आपने अपने संदेश घटक को सही तरीके से घोषित नहीं किया हो सकता है, या यह अपडेट नहीं हो रहा है। यदि ऐसा है तो उनकी सत्यापन त्रुटियां हो सकती हैं जिन्हें आप पृष्ठ पर प्रस्तुत नहीं करते हैं।

जादूगर घटक के लिए Primefaces गाइड 2.2 से:

AJAX और आंशिक सत्यापन - चरणों के बीच स्विचिंग ajax पर आधारित है, जिसका अर्थ है हर कदम ajax के साथ गतिशील भरी हुई है। आंशिक सत्यापन भी अंतर्निहित है, इस तरह से जब आप अगला क्लिक करते हैं, तो केवल वर्तमान चरण मान्य है, यदि वर्तमान चरण मान्य है, तो अगले टैब की सामग्री AJAX के साथ लोड की जाती है। प्रवाह वापस जाने पर मान्यताओं को निष्पादित नहीं किया जाता है।

दूसरी समस्या यह हो सकती है कि आपकी संपत्ति प्रबंधित बीन में ठीक से सेट नहीं हो रही है और यह सत्यापन समस्याओं का कारण बन रही है। यह अधिक संभावना लगता है।

मुझे यह सोचने में परेशानी हो रही है कि किसी को एक selectOneRadio के लिए 'आवश्यक' के अलावा सत्यापन की आवश्यकता क्यों होगी? आपके पास सीमित संख्या में विकल्प हैं और एक को चुना जाना चाहिए, इसलिए गलत मान या अमान्य मान संभव नहीं होना चाहिए।

+0

समय लेने के लिए धन्यवाद! "select" मेरे पास केवल selectOneRadio के लिए एकमात्र सत्यापन है। लेकिन विज़ार्ड अगले टैब को कॉल करने के बाद मूल्य को "भूल" लगता है। यह एक आम समस्या प्रतीत होती है: http://stackoverflow.com/questions/3854439/primefaces-wizard-component-resets-values-in-hselect-components-when-form-i – geeehhdaa

+0

Thats .... अजीब! मैं अपने आवेदन में एक पी: जादूगर का उपयोग करता हूं और मुझे यह समस्या बिल्कुल नहीं है। आगे मैं नहीं देखता कि आप क्या गलत कर रहे हैं। आप वर्तमान में प्राइमफेस और मोजररा का किस संस्करण का उपयोग कर रहे हैं? –

+0

मैं प्राइमफेस 2.2.1 का उपयोग कर रहा हूं और मैं मोजाररा का उपयोग नहीं करता, मैं माईफेस का उपयोग करता हूं। इसके अलावा, प्राइमफेस मेरे लिए बहुत अच्छा काम कर रहा है। मैंने प्राइमफ़ेस फ़ोरम में कहीं भी एक वर्कअराउंड पढ़ा है (मुझे अभी लिंक नहीं मिल रहा है), जो कहा गया है, इनपुट का उपयोग करके निम्न टैब पर नियोजित मूल्य को संरक्षित करने के लिए काम करेगा। हालांकि, यह मेरे लिए काम नहीं करेगा। – geeehhdaa

3

एक और बात आप विचार करना चाह सकते ..

आप टैब को आवश्यक फ़ील्ड के साथ परेशानी हो रही है, तो आप मैन्युअल चरणों के बीच अपने स्वयं के सत्यापन अपने विज़ार्ड घटक में एक प्रवाह घटना को लागू करने से प्रदर्शन कर सकते हैं।

public String onFlowProcess(FlowEvent event) { 
    //First perform check to see if the user is attempting to remove the last visitor 
    if ("confirm".equals(event.getNewStep()) && (visitors == null || visitors.isEmpty())) { 
     log.debug("Validation failed for empty visitors"); 
     FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Visit must have at least one visitor.", null); 
     FacesContext.getCurrentInstance().addMessage(null, msg); 
     return event.getOldStep(); 
    } 

    return event.getNewStep(); 
} 

और .xhtml फ़ाइल मैं प्रवाह लिस्टनर ईवेंट घोषित करता हूं। इसे आज़माएं और देखें कि सत्यापन संदेश दूर हो गए हैं या नहीं।

<p:wizard showNavBar="true" widgetVar="scheduler" flowListener="#{scheduleVisit.onFlowProcess}" showStepStatus="true"> 
+0

इस तकनीक का उपयोग कर मूल्य हमेशा मौजूद था। मुझे लगता है कि मैंने इसे ठीक कर दिया है। मैंने यह पाया: http://primefaces.prime.com.tr/forum/viewtopic.php?f=3&t=1724&start=0 मैंने प्रक्रिया = "@ यह" कमांड बटन पर जोड़ा और यह काम करता है। मुझे नहीं पता * क्यों *, हालांकि। और मुझे उम्मीद है कि इसका कोई दुष्प्रभाव नहीं है। हम्म। मदद करने के लिए बहुत बहुत धन्यवाद, maple_shift! – geeehhdaa

+0

अच्छा!भविष्य में इस समस्या की खोज करने वाले लोगों के लाभ के लिए कृपया अपना समाधान उत्तर के रूप में पोस्ट करें। –

+1

फोरम लिंक बदल गया: http://forum.primefaces.org/viewtopic.php?f=3&t=1724 –

1

आपको बस अपने रेडियो बटन पर आवश्यक विशेषता डालने की आवश्यकता है।

पूर्व:

<p:selectOneRadio required="true" requiredMessage="you must put it"> 
    <f:selectItem itemLabel="Días Laborales" itemValue="diasLab" /> 
    <f:selectItem itemLabel="Días Ticados" itemValue="diasTic" /> 
</p:selectOneRadio> 
-1

PrimeFaces 'पी: जादूगर सत्यापन समस्या

कदम: 1 customerInformation.xhtml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:p="http://primefaces.org/ui"> 


<p:wizard flowListener="#{customerForm.onFlowProcess}"> 

     <p:tab id="information" title="Information"> 
    <p:panel header="Customer Information"> 

     <h:outputLabel value="First Name" for="fName"/> 
      <h:inputText id="fname" value="#{customer.fname}"/>                                    

      <h:outputLabel value="Last Name" for="lName"/> 
      <h:inputText id="lname" value="#{customer.lname}"/>                

     </panel> 
     </p:tab> 

     <p:tab id="details" title="Details"> 
     <p:panel header="Customer Details"> 

       <h:outputLabel value="Address Line 1" for="addressOne"/> 
      <h:inputText id="addressOne" value="#{customer.addressOne}"/>                                    

      <h:outputLabel value="Address Line 2" for="addressTwo"/> 
      <h:inputText id="addressTwo" value="#{customer.addressTwo}"/> 

      </panel> 
     </p:tab> 
    </p:wizard> 
</html> 

चरण: 2 बनाएं सेम वर्ग CustomerForm.java

public class CustomerForm implements Serializable { 

    private static final long serialVersionUID = 1L; 

    private String fName; 
    private String lName; 
    private String addressOne; 
    private String addressTwo; 

    private static Logger logger = Logger.getLogger(CustomerForm.class.getName());           

    /** 
    * Call this method in p:wizard tag 
    * 
    */ 
    public String onFlowProcess(FlowEvent event) { 
    logger.info("Current wizard step:" + event.getOldStep()); 
    logger.info("Next step:" + event.getNewStep()); 
     return event.getNewStep(); 
    } 

    /** 
    * @return the fName 
    */ 
    public String getfName() { 
     return fName; 
    } 
    /** 
    * @param fName the fName to set 
    */ 
    public void setfName(String fName) { 
     this.fName = fName; 
    } 
    /** 
    * @return the lName 
    */ 
    public String getlName() { 
     return lName; 
    } 
    /** 
    * @param lName the lName to set 
    */ 
    public void setlName(String lName) { 
     this.lName = lName; 
    } 
    /** 
    * @return the addressOne 
    */ 
    public String getAddressOne() { 
     return addressOne; 
    } 
    /** 
    * @param addressOne the addressOne to set 
    */ 
    public void setAddressOne(String addressOne) { 
     this.addressOne = addressOne; 
    } 
    /** 
    * @return the addressTwo 
    */ 
    public String getAddressTwo() { 
     return addressTwo; 
    } 
    /** 
    * @param addressTwo the addressTwo to set 
    */ 
    public void setAddressTwo(String addressTwo) { 
     this.addressTwo = addressTwo; 
    } 

} 

नोट: xhtml फ़ाइल में आवश्यक = "सत्य" डालें

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