2010-02-25 9 views
17

JSF 2 के साथ आप यह करने के लिए सक्षम होना चाहिए:बिलाव के साथ ईएल 2.2 का उपयोग 6.0.24

<h:commandButton action="#{myBean.myAction(myParameter)}"/> 

जो तब कार्रवाई विधि कहेंगे, (मान यह एक पूर्णांक है) पैरामीटर में गुजर:

@ManagedBean 
@SessionScoped 
public class MyBean { 
    ... 
    public String myAction(Integer myParameter) { 
     // do something 
     return null; 
    } 
    ... 
} 

यह ग्लासफ़िश v3 पर पूरी तरह से काम करता है। हालांकि नहीं बिलाव पर, आप पार्स त्रुटि के एक ELException अधिसूचित प्राप्त

Caused by: javax.el.ELException: Error Parsing: ... 

अब, वहाँ एक documented way of making this work using EL 2.2 और Glassfish के कार्यान्वयन बिलाव lib निर्देशिका में el-api जार की जगह है, लेकिन मैं अभी भी नहीं के साथ होने वाली एक ही त्रुटि मिलती है भाग्य। टॉमकैट वास्तव में मुझे निराश करना शुरू कर रहा है! जेएसएफ 2 आसान होना है!

Maven पोम टुकड़े:

<repositories> 
    <repository> 
    <id>sun</id> 
    <url>http://download.java.net/maven/2/</url> 
    </repository> 
    <repository> 
    <id>jboss</id> 
    <url>http://repository.jboss.com/maven2/</url> 
    </repository> 
</repositories> 
... 
    <dependency> 
    <groupId>javax.el</groupId> 
    <artifactId>el-api</artifactId> 
    <version>2.2</version> 
    <scope>provided</scope> 
    </dependency> 

    <dependency> 
    <groupId>org.glassfish.web</groupId> 
    <artifactId>el-impl</artifactId> 
    <version>2.2</version> 
    <scope>provided</scope> 
    </dependency> 

अधिक जानकारी।

यहां स्टैक ट्रेस का हिस्सा है, ऐसा लगता है कि यह अभी भी अपाचे ईएल कार्यान्वयन का उपयोग कर रहा है, और जिसे मैंने lib में डाला नहीं है। मैंने मौजूदा el-api.jar को पूरी तरह से हटा दिया जो कि टोमकैट के साथ आया था, क्या el-impl.jar है, क्या मुझे कहीं भी हटाया जा रहा है जो कुछ ओवरराइड कर सकता है?

Was expecting one of: 
    "}" ... 
    "." ... 
    "[" ... 
    ">" ... 
    "gt" ... 
    "<" ... 
    "lt" ... 
    ">=" ... 
    "ge" ... 
    "<=" ... 
    "le" ... 
    "==" ... 
    "eq" ... 
    "!=" ... 
    "ne" ... 
    "&&" ... 
    "and" ... 
    "||" ... 
    "or" ... 
    "*" ... 
    "+" ... 
    "-" ... 
    "/" ... 
    "div" ... 
    "%" ... 
    "mod" ... 

    at org.apache.el.parser.ELParser.generateParseException(ELParser.java:2142) 
    at org.apache.el.parser.ELParser.jj_consume_token(ELParser.java:2024) 
    at org.apache.el.parser.ELParser.DeferredExpression(ELParser.java:113) 
    at org.apache.el.parser.ELParser.CompositeExpression(ELParser.java:40) 
    at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:93) 
    ... 64 more 
+1

यह समस्या जेएसएफ 2 विशिष्ट नहीं है। यह जेएसपी-ईएल 2.2 विशिष्ट है। – BalusC

उत्तर

8

मैं एक टिप्पणी में उल्लेख किया है, यह (यानी की जगह अल-impl-2.2.jar साथ Jasper-el.jar)

+0

मेरे लिए काम किया, धन्यवाद! – waxwing

25

अन्य उत्तर में उल्लेख किया ईएल कार्यान्वयन अपग्रेड करके हल किया जा सकता, आपको el-api-2.2.jar को अपने टोमकैट सर्वर के lib फ़ोल्डर में जोड़ने और el-impl-2.2.jar को अपने वेब-आईएनएफ/lib फ़ोल्डर में जोड़ने की आवश्यकता है।

अन्य उत्तरों जैस्पर को हटाने या अभिव्यक्ति FactoryImpl के कस्टम कार्यान्वयन का उल्लेख करने का उल्लेख करते हैं। यह काम कर सकता है, लेकिन आपको ऐसा करने की आवश्यकता नहीं है।

आपको सिर्फ माइग्रैस पर org.apache.myfaces.EXPRESSION_FACTORY का उपयोग करके अभिव्यक्ति फैक्ट्री कार्यान्वयन को ओवरराइड करने की आवश्यकता है या com.sun.faces.expression Mojarra पर फैक्टरी।

<context-param> 
    <param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name> 
    <param-value>com.sun.el.ExpressionFactoryImpl</param-value> 
</context-param> 
    <context-param> 
    <param-name>com.sun.faces.expressionFactory</param-name> 
    <param-value>com.sun.el.ExpressionFactoryImpl</param-value> 
    </context-param> 
+0

धन्यवाद। मैंने वेब पर चारों ओर उड़ने वाले सभी समाधानों के साथ दो दिनों की कोशिश की और यह एकमात्र ऐसा काम करता है जो काम करता है। – ali

+0

सर्वर-साइड पथ पर जाने के लिए एपीआई जार की सलाह देने के लिए सामान्य ज्ञान प्रतीत नहीं होता है। -पीआई आमतौर पर इसका मतलब है कि यह एक विनिर्देश है, और केवल संकलन-समय की आवश्यकता है (जिसे मैवेन में "प्रदत्त" स्कोप के साथ किया जा सकता है। इसके अलावा, यदि आप अपना खुद का कार्यान्वयन करते हैं, तो मैं सुझाव दूंगा कि इसे अपने मैवेन प्रोजेक्ट में डालें "रनटाइम" स्कोप के साथ। मैं जानबूझकर सर्वर साइड लाइब्रेरीज़ के साथ संभावित संघर्षों का मुद्दा छोड़ देता हूं ... यह स्पष्ट है कि आपके टॉमकैट वितरण में एक कार्यान्वयन पहले से ही उपलब्ध कराया गया है, तो हमारे यहां संघर्ष होंगे। – YoYo

+1

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

1

अल-api-2.2.jar और अल-impl-2.2.jar साथ अल-api.jar और अल-impl.jar की जगह समस्या का समाधान।

इसके अलावा, आप संदर्भ पैरामीटर

<context-param> 
    <param-name>org.apache.myfaces.EXPRESSION_FACTORY</param-name> 
    <param-value>com.sun.el.ExpressionFactoryImpl</param-value> 
</context-param> 
    <context-param> 
    <param-name>com.sun.faces.expressionFactory</param-name> 
    <param-value>com.sun.el.ExpressionFactoryImpl</param-value> 
    </context-param> 
1

आप JBoss ईएल उपयोग कर सकते हैं अपने context.xml में जोड़ने की जरूरत है।

यह अभिव्यक्ति भाषा 2.1 का कार्यान्वयन है। लेकिन यह अपने उदाहरण के रूप में विधि पैरामीटर की अनुमति देने एक्सटेंशन नहीं है:

<h:commandButton action="#{myBean.myAction(myParameter)}"/> 

लाभ यह है केवल अपने webapp और नहीं बिलाव के lib निर्देशिका बदलने के लिए है कि आप।

निर्देश

  1. डाउनलोड the latest version of Seam 2
  2. निकालें lib/jboss-el.jar
  3. WEB-INF/lib/jboss-el.jar
  4. करने के लिए इसे कॉपी अपने web.xml सेट में:

    <context-param> 
        <param-name>com.sun.faces.expressionFactory</param-name> 
        <param-value>org.jboss.el.ExpressionFactoryImpl</param-value> 
    </context-param> 
    

Invoke direct methods or methods with parameters in EL भी देखें।

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