JSF не интерпретирует заполнитель в ‹h:outputText value=#{tableRow.x} /›

Я смешиваю jsf, richfaces и spring вместе (faces backing beans = spring beans), и у меня есть страница jsp с таблицей. По какой-то странной причине тег

<rich:dataTable value="#{inputBean.table}" var="tableRow">

вызывает метод inputBean.getTable() и создает выходную таблицу с тем же количеством строк таблицы, что и table(List) -> #{inputBean.table} был заменен таблицей объектов из inputBean.

Но когда я хочу отобразить значение строки X с помощью

<h:outputText value="#{tableRow.x}" />

на странице отображается только #{tableRow.x}, а не значение. Я думаю, что это может быть какая-то проблема с конфигурацией: Richfaces настроен правильно, а jsf нет (h: outputText - это тег jsf)

Любые идеи? Я был бы очень признателен за вашу помощь. Заранее спасибо. Страница:

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://richfaces.org/a4j" prefix="a4j"%>
<%@ taglib uri="http://richfaces.org/rich" prefix="rich"%>
<html>
 <body>
 <f:view>
 <h:form>
    <rich:dataTable value="#{inputBean.table}" var="tableRow">
  <f:facet name="caption">
   <h:outputText value="United States Capitals" />
   </f:facet>
   <f:facet name="header">
    <h:outputText value="Capitals and States Table" />
   </f:facet>
   <rich:column>
    <f:facet name="header">x</f:facet>
    <h:outputText value="#{tableRow.x}" />
    <f:facet name="footer">State Name</f:facet>
   </rich:column>
   <rich:column>
    <f:facet name="header">lx</f:facet>
    <h:outputText value="#{tableRow.lx}" />
   <f:facet name="footer">State Capital</f:facet>
   </rich:column>
           <f:facet name="footer">
    <h:outputText value="Capitals and States Table" />
          </f:facet>
  </rich:dataTable>
 </h:form>
</f:view>
</body>
</html>

веб.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
 <!--  *********** Faces config *********** -->
 <context-param>
  <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
  <param-value>server</param-value>
 </context-param>
 <context-param>
  <param-name>javax.faces.CONFIG_FILES</param-name>
  <param-value>/WEB-INF/faces-config.xml</param-value>
 </context-param>
 <!-- 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>
 <!--  *********** Faces config *********** -->
 <!--  *********** rich faces config *********** -->
 <!-- Plugging the "Blue Sky" skin into the project -->
 <context-param>
  <param-name>org.richfaces.SKIN</param-name>
  <param-value>blueSky</param-value>
 </context-param>
 <!-- Making the RichFaces skin spread to standard HTML controls -->
 <context-param>
  <param-name>org.richfaces.CONTROL_SKINNING</param-name>
  <param-value>enable</param-value>
 </context-param>
 <!-- Defining and mapping the RichFaces filter -->
 <filter>
  <display-name>RichFaces Filter</display-name>
  <filter-name>richfaces</filter-name>
  <filter-class>org.ajax4jsf.Filter</filter-class>
 </filter>
 <filter-mapping>
  <filter-name>richfaces</filter-name>
  <servlet-name>Faces Servlet</servlet-name>
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>INCLUDE</dispatcher>
 </filter-mapping>
 <!--  *********** rich faces config *********** -->
 <!--  *********** Spring config *********** -->
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
 <listener>
  <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
 </listener>
 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/applicationContext.xml</param-value>
 </context-param>
 <!--  *********** Spring config *********** -->
 <welcome-file-list>
  <welcome-file>
      index.jsp
    </welcome-file>
 </welcome-file-list>
</web-app>

конфиг приложения:

 <?xml version="1.0"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-2.5.xsd">
  <!-- the parent application context definition for the springapp application -->
    <bean id="inputBean" class="backingbeans.InputBean"  scope="request">
         <property name="tableService" ref="tableService"/>
    </bean>    
    <bean id="tableService" class="TableServiceImpl"  scope="session">        
    </bean>
  </beans>

person Stepik    schedule 26.08.2010    source источник
comment
Чтобы исключить одно и другое, добавьте <h:outputText value="#{inputBean.table}" /> перед <rich:dataTable> и сообщите нам, что оно отображает.   -  person BalusC    schedule 26.08.2010
comment
Что такое класс объекта в tableRow? Есть ли у него метод getX()?   -  person amorfis    schedule 27.08.2010
comment
Привет, спасибо за вашу помощь. Я уже пробовал простой код только с h: outputText, без расширенных тегов - тот же результат. TableRow имеет метод getX(). Это не работает и в других бобах. В журнале нет ничего неправильного :-( Мое мнение, что h-тег не полностью интерпретируется с помощью jsf-›, похоже, проблема с конфигурацией или библиотекой. Я думаю, что это должно быть где-то, когда jsf генерирует код, он заменяет тег, но не значение. Есть идеи? Заранее спасибо.   -  person Stepik    schedule 27.08.2010


Ответы (1)


Хорошо, после дня, потраченного на настройку, я обнаружил ошибку - я использовал richfaces 3.1.0, но jsf 1.2 !!! После того, как я перешел на jsf 2.x, проблемы внезапно исчезли. Я думаю, что основная проблема заключалась в том, что новые ричфейсы нельзя смешивать со старыми jsf.

person Stepik    schedule 27.08.2010