Передача значения перечисления в качестве параметра методу bean-компонента со страниц JSF завершается неудачно после перехода на tomcat - PullRequest
5 голосов
/ 02 марта 2012

Я недавно перенес свое приложение JSF (с использованием простых лиц) с glassfish 3.1 на сервер tomcat7.Ранее передача значения перечисления в виде строки в управляемые методы bean-компонента через атрибут actionlistener работала (без необходимости преобразователя для преобразования строки в перечисление), но теперь она завершается с javax.el.MethodNotFoundException.

Страница JSF:

<h:form>
   <h:outputLabel value="Title"/><br/>
   <p:inputText value="#{lobController.current.title}"/>

   <p:commandButton action="#{lobController.create('CAR')}" value="Post"/>
</h:form>

Метод управляемого компонента

public void create(Type type) {
  ...
}

Сообщения журнала:

javax.el.MethodNotFoundException: /_newLOB.xhtml @ 85,111 action = "# {lobController.create ('CAR')}": метод не найден: d432.xontrollers.LOBController@15b2cec.create (java.lang.Строка) в com.sun.faces.application.ActionListenerImpl.processAction (ActionListenerImpl.java:110) в javax.faces.component.UICommand.broadcast (UICommand.java:315) в javax.faces.component.UIData.broadcast (UIData.java: 1093) в javax.faces.component.UIData.broadcast (UIData.java:1093) в javax.faces.component.UIViewRoot.broadcastEvents (UIViewRoot.java:794) в javax.faces.component.UIViewRoot.processApplication (UIViewRoot.java:1259) на com.sun.faces.lifecycle.InvokeApplicationPhase.execute (InvokeApplicationPhase.java:81) на com.sun.faces.lifecycle.Phase.doPhase (Phase.java:101) на com.sun.faces.lifecycle.LifecycleImpl.execute (LifecycleImpl.java:118) в javax.faces.webapp.FacesServlet.service (FacesServlet.java:593) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.java:304) в org.apache.catalina.core.ApplicationFilterChain.doFilter: atFilter (ApplicationFilter: atg).primefaces.webapp.filter.FileUploadFilter..java: 210)


Редактировать

Это начинает работать, если я изменяю метод управляемого компонента следующим образом:

public void create(String type) {
     Type type = Type.valueOf(type);
     ...
}

Использование Primefaces 3.1 с JSF 2.1.6 на Tomcat 7.0.14

1 Ответ

13 голосов
/ 22 марта 2012

Это ошибка в реализации EL Tomcat. Я сообщил вам об этом: выпуск 52970 . Надеюсь, они не так разборчивы в этом, как в моих предыдущих отчетах.

До тех пор, пока они не исправят это, лучше всего подать копию файла JAR реализации EL 2.2 в Glassfish 3 в /WEB-INF/lib вашего веб-приложения и попросить Мохарру использовать его вместо следующей записи в web.xml

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

Обновление : в билете упоминается, что оно исправлено и будет в 7.0.27 и далее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...