tomcat7 + El2.2 + jsf1.2 не работает - PullRequest
0 голосов
/ 14 ноября 2011

язык выражений не работает в tomcat7 с jsf1.2. #{message.name_prompt} выдан как #{message.name_prompt}.

я попытался заменить el-api.jar в котеВ папке lib с el-api-2.2.jar и поместите el-impl-2.2.jar в папку WEB-INF / lib, добавив

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

в web.xml .все тот же.

моя точная версия tomcat * 7.0.21 * это web.xml со значением по умолчанию tomcat:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    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-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
<display-name>BasicExamples</display-name>

 <context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>server</param-value>
 </context-param>

 <listener>
  <listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
 </listener>
 <!-- Faces Servlet -->
 <servlet>
  <servlet-name>Faces Servlet</servlet-name>
  <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>
 <!-- Faces Servlet Mapping -->
 <servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.jsf</url-pattern>
 </servlet-mapping>
 <login-config>
  <auth-method>BASIC</auth-method>
 </login-config>
</web-app>

обновление: теперь я обнаружил, что язык выражения не работает на странице формы, но язык выражения сообщения работает как #{message.result_text} => You entered the following information:, но все еще управляемый компонент не работает.и El работает нормально с jsf2.0

1 Ответ

1 голос
/ 14 ноября 2011

Вам не нужно ничего устанавливать / добавлять, чтобы заставить EL 2.2 работать в Tomcat 7. Он уже поставляется с EL 2.2. Удалите эти JAR-файлы и контекстный параметр.

Учитывая ваши симптомы

#{message.name_prompt} выводится как #{message.name_prompt}

У меня сложилось впечатление, что вы говорите об использовании EL в тексте шаблона, например:

<p>This is EL in template text #{message.name_prompt}</p>

Это , а не функция EL 2.2. Это особенность Facelets. Facelets является преемником JSP. Вам нужно заменить JSP на Facelets, чтобы иметь возможность использовать EL в тексте шаблона таким образом. Для JSF 1.2 вы можете использовать Facelets 1.1 .

В противном случае, если вы хотите придерживаться JSP, вам действительно нужно использовать <h:outputText>:

<p>This is EL in template text <h:outputText value="#{message.name_prompt}" /></p>

Единственная новая особенность EL 2.2 - это возможность вызывать методы действия с аргументами, например ::101026

<h:dataTable value="#{bean.list}" var="item">
    <h:column>
        <h:commandButton value="Edit" action="#{bean.edit(item)}" />
    </h:column>
</h:dataTable>

Смотри также:

...