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
İ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>
Nasıl " için SQL Server bir işlevi...
Nasıl cshtml bir şablon işlevi oluştur...
Nasıl android Özel bir İletişim kutusu...
Haritalar Google: Nasıl özel bir İnfoW...
Nasıl bir sınıf içinde bir şablon işle...