फेसलेट्स में EL बूलियन एक्सप्रेशंस में && का उपयोग कैसे करें?


83

मुझे थोड़ी परेशानी हो रही है कि कैसे करें और फेसलेट्स में ईएल एक्सप्रेशन पर क्या करें। तो मूल रूप से मेरे पास है:

<h:outputText id="Prompt"
    value="Fobar" 
    rendered="#{beanA.prompt == true && beanB.currentBase !=null}" />

लेकिन मैं मिलता रहा:

त्रुटि का पता लगाया [पंक्ति: 69] इकाई का नाम तुरंत इकाई संदर्भ में 'और' का पालन करना चाहिए।

जवाबों:


162

फेसलेट्स XML आधारित व्यू टेक्नोलॉजी है। &एक है विशेष वर्ण XML में एक इकाई की तरह की शुरुआत का प्रतिनिधित्व &amp;जो साथ समाप्त होता है ;चरित्र। आपको इसे या तो बचाना होगा, जो बदसूरत है:

rendered="#{beanA.prompt == true &amp;&amp; beanB.currentBase != null}"

या andइसके बजाय कीवर्ड का उपयोग करने के लिए , जिसे पठनीयता और रखरखाव के लिए पसंद किया जाता है:

rendered="#{beanA.prompt == true and beanB.currentBase != null}"

यह सभी देखें:


असंबंधित जब अभिव्यक्ति पहले से ही एक बूलियन परिणाम की उम्मीद ठोस समस्या के लिए, बूलियन्स साथ बूलियन्स की तुलना थोड़ा समझ में आता है। मुझे इससे छुटकारा मिलेगा == true:

rendered="#{beanA.prompt and beanB.currentBase != null}"

2
जेएसएफ नकल को वास्तव में इस मामले को पहचानना चाहिए और एक बेहतर निदान देना चाहिए। यह एक साधारण समस्या है, लेकिन शुरुआती लोगों के लिए बहुत भ्रामक है।
माइक ब्रौन

6

BalusC का जवाब देने के लिए इसके अलावा, को बदलने के लिए निम्नलिखित जावा RegExp का उपयोग &&के साथ and:

Search:  (#\{[^\}]*)(&&)([^\}]*\})
Replace: $1and$3

यदि आप अपने EL अभिव्यक्तियों में> 2 लीटर का उपयोग कर रहे हैं, तो सभी घटनाओं को खोजने के लिए आपने कई बार इस नियमित अभिव्यक्ति प्रतिस्थापन को चलाया है। यदि आपका ईएल अभिव्यक्ति वाक्यविन्यास भिन्न हो तो अग्रणी # $ द्वारा प्रतिस्थापित करने का मन।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.