2012-04-19 3 views
0

Я пытаюсь вызвать метод, используя пользовательскую функцию EL с perameter jsfbean.Функция EL не найдена ошибка

<c:set var="test1" value="${cx:methodName('para')}" scope="session"/> 
     <h:outputText value="#{test1}"/> 

я сделал следующий идентификатор TLD и гнал его в WEB-INF

<?xml version="1.0" encoding="UTF-8" ?> 
    <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-jsptaglibrary_2_1.xsd" 
     version="2.1"> 

     <tlib-version>1.0</tlib-version> 
     <short-name>Custom_Functions</short-name> 
     <uri>http://example.com/functions</uri> 

     <function> 
      <name>methodName</name> 
      <function-class>funcionclass(Jsfbean)</function-class> 
      <function-signature>java.lang.String methodName(java.lang.String)</function-signature> 
     </function> 
    </taglib> 

я также настроить в web.xml

<jsp-config> 
     <taglib> 
       <taglib-uri>http://example.com/functions</taglib-uri> 
       <taglib-location>/WEB-INF/functions.tld</taglib-location> 
     </taglib> 
</jsp-config> 

и до сих пор она становится функция не найдена ошибка.

Ниже метод код

public static String methodName(String s1) throws Exception 
    { 
     return "Kshitij"; 
    } 

может любая помощь тело.

+1

Вы используете JSP или Facelets? Вы создали функцию JSP EL, но ваш тег JSF 2.0 указывает, что вы, возможно, используете Facelets. Кроме того, какой сервлетконтейнер вы используете? Совместим ли Servlet 3.0? Является ли 'web.xml' объявленным соглашением Servlet 3.0? – BalusC

+0

есть. Я использую facelets. и это мой web.xml <веб-приложение xmlns = "http://java.sun.com/xml/ns/j2ee" \t \t xmlns: xsi = "http://www.w3.org/2001/ XMLSchema-instance " \t xsi: schemaLocation =" http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd " \t version = "2.4"> – KSHiTiJ

+0

А? Вы используете JSF 2.0 на контейнере Servlet 2.4? Это не будет работать без хаков. Что именно делает ваш сервер/версия? – BalusC

ответ

2

Вы создали функцию JSP EL, пока вы используете Facelets. Это не сработает. Кроме того, неверно ваше объявление <function-class>. Он должен указать полное имя класса (FQN). Например. com.example.FunctionClass.

Переименовать файл TagLib в /WEB-INF/functions.taglib.xml со следующим обновляемым содержанием:

<?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>methodName</function-name> 
     <function-class>com.example.FunctionClass</function-class> 
     <function-signature>java.lang.String methodName(java.lang.String)</function-signature> 
    </function> 
</facelet-taglib> 

Затем вам нужно зарегистрировать его в web.xml следующим образом (не забудьте удалить старую регистрацию TagLib JSP!):

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

Наконец объявим его на ваш взгляд, следующим пространством имен XML

xmlns:cx="http://example.com/functions" 

Unrelated к конкретной проблеме, существует альтернативный подход, вероятно, гораздо проще: install JBoss EL. Таким образом, вы сможете прибегать к методам как можно более быстрыми способами в новом EL 2.2.

+0

Отлично. он работает безотлагательно. Благодарю. – KSHiTiJ

+0

Я думаю, что сделал ошибку на web.xml – KSHiTiJ

+0

Спасибо Balus C. – KSHiTiJ

1

Вам все еще нужно включить ссылку на ваш JSP:

<%@taglib prefix="cx" uri="http://example.com/functions"%> 
+0

Я использую facelets и следующие ns, которые я использую. xmlns: cx = "http://example.com/functions" – KSHiTiJ

Смежные вопросы