2013-02-18 58 views
5

आप प्राइमफेस पी कैसे बनाते हैं: ब्लॉकयूआई गतिशील रूप से एक निश्चित घटक को अवरुद्ध करता है, जो ईएल स्थिति पर है?प्राइमफेस पी: ब्लॉकयूआई गतिशील रूप से एक निश्चित घटक को अवरुद्ध कर रहा है (जेएसएफ ईएल स्थिति पर)?

उपयोग के मामले:

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

वर्तमान में समस्या यह है कि जब "स्थिति मोड" में, जब स्थिति परिवर्तन संवाद स्थिति को गैर-पार करने के लिए बदलता है, तो पेज नियमित रूप से नियमित रूप से वापस/अपडेट करता है, लेकिन नेविगेशन पेड़ पर छाया अभी भी है। चूंकि हम अब नियमित मोड में हैं, इसलिए अगर कोई अधिक टकराव नहीं हुआ है तो मुझे अनब्लॉक करने के लिए कुछ तरीका चाहिए।

समझा? :-)

ठीक है, यहाँ सेम संपत्ति पहले बताया गया है:

/* 
* The logic of this method ensures that after status update the 
* mode is automatically put back into regular view if no followup 
* date exceeded collisions exist. 
*/ 
public boolean isFollowupExceededCollisionsShown() 
{ 
    return getFollowupExceededCount() > 0 ? this.followupExceededCollisionsShown : false; 
} 

1 कोशिश:

VDL डॉक्स http://www.primefaces.org/docs/vdl/3.4/primefaces-p/blockUI.html कुछ अवरुद्ध विशेषता का पता चला को देखते हुए।

<p:blockUI widgetVar="explorerBlocker" 
       block=":explorer-form" 
       blocked="#{collisionManager.followupExceededCollisionsShown}" /> 

उपरोक्त हालांकि बिल्कुल कुछ भी नहीं करता है।

2 कोशिश:

शोकेस http://www.primefaces.org/showcase/ui/blockUI.jsf को देखते हुए, ग्राहक एपीआई अधिक पर्याप्त लग रहा था।

<p:dialog id="state-change-dialog" 
       widgetVar="stateChangeDialog" 
       modal="true" 
       appendToBody="true"> 

     <h:form> 

      <ui:include src="/view/collisionmgmt/collisionStatusChangeGrid.xhtml" /> 

      <h:panelGroup layout="block" styleClass="center-button-panel"> 
       <p:commandButton id="save-button" 
           icon="ui-icon ui-icon-disk" 
           value="OK" 
           action="#{collisionManager.performStatusChange}" 
           process="@form" 
           update=":explorer-form:tree :collision-form:period-grid :collision-form:list :collision-form:growl" 
           oncomplete="stateChangeDialog.hide();" /> 
       <p:commandButton icon="ui-icon ui-icon-close" 
           value="Cancel" 
           update=":collision-form:list" 
           onclick="stateChangeDialog.hide();" 
           immediate="true" /> 
      </h:panelGroup> 
     </h:form> 

    </p:dialog> 

विचार किसी भी तरह का विस्तार करने के लिए था ठीक बटन के oncomplete = "":

विचार एक ValueExpression पर निर्भर करता है जब स्थिति परिवर्तन संवाद पर ठीक दबाकर या तो शो() या छिपाने() कहते थे ईएल #{collisionManager.followupExceededCollisionsShown} के नए मूल्य के आधार पर explorerBlocker.show(); या explorerBlocker.hide(); पर कॉल के साथ।

दो बुनियादी वेरिएंट मैंने कोशिश कर रहे हैं:

oncomplete="stateChangeDialog.hide(); #{collisionManager.followupExceededCollisionsShown ? 'explorerBlocker.show();' : 'explorerBlocker.hide();' }" 

oncomplete="stateChangeDialog.hide(); if (#{collisionManager.followupExceededCollisionsShown}){ explorerBlocker.show(); } else { explorerBlocker.hide(); }" 

स्थिति परिवर्तन संवाद हर समय बंद कर दिया है, लेकिन तर्क से ऊपर में लात नहीं है

मैं कुछ स्वाभाविक गलत कर रही किया जाना चाहिए। यहाँ। मुझे संदेह है कि ओके बटन की अपूर्ण ईएल अभिव्यक्ति को क्लिक किए जाने पर फिर से मूल्यांकन नहीं किया जाता है। अद्यतन सूची में @this जोड़ना कुछ भी नहीं बदलता है।

    update="@this :explorer-form:tree :collision-form:period-grid :collision-form:list :collision-form:growl" 
  1. कैसे मेरी समस्या का सबसे अच्छा हल किया जाता है, जिनमें "सर्वोत्तम" JSF-केवल प्रथम, तो PrimeFaces-विशिष्ट है (और आदर्श है, जहां इस प्रलेखित है!)।

  2. क्या ब्लॉकयूआई अवरुद्ध = "# {का उपयोग करना संभव है?} "ईएल साथ विशेषता

धन्यवाद

उत्तर

3

एक तरह से प्रबंधित बीन से छिपाने() और शो() BlockUI की विधि कॉल करने के है
आप ऐसा कर सकते हैं RequestContext का उपयोग करके:।

RequestContext.getCurrentInstance() पर अमल ("widgetVar.show()");

एक और आप चर टी पारित सकता है ओ जावास्क्रिप्ट फ़ंक्शन और उसके बाद जावास्क्रिप्ट फ़ंक्शन आपके लिए इसका ख्याल रखे।

onClick="func(#{elvariable})" 

<script type="text/javascript"> 
function func(value) 
{ 
if(value==something){ 
widgetVar.show(); 
}else{ 
widgetVar.hide(); 
} 
} 
</script>