SORU
16 AĞUSTOS 2011, Salı


Nasıl özel EL bir işlevi oluşturmak için?

Im AKSARAY 2 için yeni. Benim sorum bu soruya BalusC cevap kickstart kod BalusC gönderildi çalıştım ve EL ayrıştırılırken bir hata ile karşılaştı: jsf2 ajax update parts based on request parameters ile ilgili

 /nameofpage.xhtml @12,64 rendered="#{bean.panels.contains('u1')}"
 Error Parsing: #{bean.panels.contains('u1')}

Bu /WEB-INF/web.xml Sunucu uygulaması 3.0 başı olarak bildirilen bir spec ile bir Sunucu uygulaması 3.0 / 2.2 yetenekli EL konteyner kaçmıyorum kaynaklanıyor sanırım. Tomcat 6 kullanıyorum.

BalusC bir özel oluşturmak için onun cevabı önerilen EL fonksiyonu. Ama nasıl bu özel EL bir işlevi kullanarak başarırız? Ya da bu sadece benim projem bazı bölümlerini yapılandırma tarafından tamir edilebilir mi?

Aşağıda benim web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>    
  </context-param>      
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
</web-app>

CEVAP
16 AĞUSTOS 2011, Salı


İlk önce tam olarak ne iş yapar istediğiniz: public static bir yöntem ile final bir sınıf oluşturun

package com.example;

import java.util.Collection;

public final class Functions {

    private Functions() {
        // Hide constructor.
    }

    public static boolean contains(Collection<Object> collection, Object item) {
        return collection.contains(item);
    }

}

Sonra /WEB-INF/functions.taglib.xml 14 *olarak tanımlayın:

<?xml version="1.0" encoding="UTF-8"?>
<facelet-taglib 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facelettaglibrary_2_0.xsd"
    version="2.0">
    <namespace>http://example.com/functions</namespace>

    <function>
        <function-name>contains</function-name>
        <function-class>com.example.Functions</function-class>
        <function-signature>boolean contains(java.util.Collection, java.lang.Object)</function-signature>
    </function>
</facelet-taglib>

/WEB-INF/web.xml mevcut yeni tağlib ile: familarize Facelets

<context-param>
    <param-name>javax.faces.FACELETS_LIBRARIES</param-name>
    <param-value>/WEB-INF/functions.taglib.xml</param-value>
</context-param>

(Not: Eğer zaten javax.faces.FACELETS_LIBRARIES definied varsa, o zaman sadece yeni yolu noktalı virgülle ayrılmış ekleyebilirsiniz)

Sonra Facelets belirtebilirsiniz XHTML yeni ad olarak XML dosyası:

<html 
    xmlns="http://www.w3.org/1999/xhtml"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:func="http://example.com/functions"
    ...
>

Nihayet amaçlı olarak kullanabilirsiniz:

rendered="#{func:contains(bean.panels, 'u1')}"

Tamamen farklı bir alternatif olarak, ayrıca projenizde JBoss EL içerebilir. Tomcat 6.0 üzerinde çalışır ve EL dışı alıcı yöntemlerini çağırmak yapabileceksiniz. /WEB-INF/lib 26 *dosya açılır ve aşağıdakileri ekleyin web.xml:

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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • circuschina

    circuschina

    16 Mart 2007
  • eurotuner

    eurotuner

    6 Mart 2006
  • William Hyde

    William Hyde

    23 HAZİRAN 2008