2016-08-18 9 views
11

मेरे पास दो बटन हैं, एक में मुझे <f:convertDateTime> काम करने की आवश्यकता है, लेकिन दूसरे में मुझे बटन क्लिक पर <f:convertDateTime> अक्षम करने की आवश्यकता है।अक्षम करें जेएसएफ एफ सक्षम करें: कन्वर्टडेटाइम

मैंने गुण rendered और disabled की कोशिश की, लेकिन यह काम नहीं किया, जो मेरी गलती थी क्योंकि यह एपीआई दस्तावेज़ों के अनुसार उपलब्ध नहीं है।

इसके अलावा, javax.faces.converter.DateTimeConverter वर्ग को ओवरराइड करने का कोई तरीका है, जब भी f:convertDateTime ट्रिगर किया जाता है मेरी कक्षा को कॉल किया जाएगा?

+0

क्या आपके पास नमूना एक्सएचटीएमएल है? – PDStat

उत्तर

3

मैं गुण गाया और विकलांग की कोशिश की, लेकिन यह काम नहीं किया , जो मेरी गलती थी क्योंकि यह एपीआई दस्तावेज़ों के अनुसार उपलब्ध नहीं है।

दरअसल, यह व्यवहार समर्थित नहीं है।

इसके अलावा, वहाँ वर्ग javax.faces.converter.DateTimeConverter ऐसी है कि जब भी f:convertDateTime शुरू हो रहा है मेरी कक्षा बुलाया जाएगा ओवरराइड करने के लिए एक तरीका है: हालांकि, एक संभव समाधान के रूप में, आप मूल रूप से पहले से ही इस सवाल का जवाब खुद दिया था?

यह संभव है और आपकी प्रारंभिक समस्या को भी हल करेगा। same <converter-id> पर <f:convertDateTime> पर faces-config.xml में इसे <converter> के रूप में पंजीकृत करें।

<converter> 
    <converter-id>javax.faces.DateTime</converter-id> 
    <converter-class>com.example.YourDateTimeConverter</converter-class> 
</converter> 

उसमें आप इस तरह की जाँच करता है, तो एक निश्चित बटन दबाने के रूप में, अतिरिक्त सशर्त जाँच कर सकता है, या एक निश्चित अनुरोध पैरामीटर वर्तमान या अनुपस्थित है यदि। यदि आप डिफ़ॉल्ट <f:convertDateTime> नौकरी जारी रखना चाहते हैं, तो बस super पर प्रतिनिधि दें, बशर्ते से extends प्रदान करें।

उदा। getAsObject() में:

public class YourDateTimeConverter extends DateTimeConverter { 

    @Override 
    public void getAsObject(FacesContext context, UIComponent component, String submittedValue) { 
     // ... 

     if (yourCondition) { 
      // Do your preferred way of conversion here. 
      // ... 
      return yourConvertedDateTime; 
     } else { 
      // Do nothing. Just let default f:convertDateTime do its job. 
      return super.getAsObject(context, component, submittedValue); 
     } 
    } 

    // ... 
} 
+0

धन्यवाद महान यह मेरे जवाब को पूरी तरह से हल किया। – Anupam

+0

आपका स्वागत है। – BalusC

0

मुझे लगता है कि आपके पास बटन क्लिक के आधार पर कुछ टेक्स्ट प्रदर्शित होता है (यदि मैं गलत हूं तो मुझे सही करें)। तो यह ऐसा ही कुछ किया जाना चाहिए:

<h:commandButton value="Convert" action="#{bean.doBtnConvert}" /> 

<h:commandButton value="Don't convert" action="#{bean.doBtnDontConvert}" /> 

<h:panelGroup id="pgText"> 
    <h:outputText value="#{bean.someDateTime}" rendered="#{bean.convert}"> 
     <f:convertDateTime pattern="dd.MM.yyyy HH:mm:ss" /> 
    </h:outputText> 

    <h:outputText value="#{bean.someDateTime}" rendered="#{not bean.convert}"> /> 
</h:panelGroup> 

और सेम में आप निम्नलिखित क्षेत्र और विधियों है:

private Date someDate; 
private boolean convert; 

public String doBtnConvert(){ 
    setConvert(true); 
    String viewId = FacesContext.getCurrentInstance().getViewRoot().getViewId(); 
    return viewId + "?faces-redirect=true"; 
} 

public String doBtnDontConvert(){ 
    setConvert(false); 
    String viewId = FacesContext.getCurrentInstance().getViewRoot().getViewId(); 
    return viewId + "?faces-redirect=true"; 
} 

// getter and setter for 'someDate' and 'convert' fields 
+0

बिल्कुल नहीं, लेकिन मदद के लिए धन्यवाद। – Anupam

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