Проблемы с макетом страницы после перехода на JSF 2.0, RichFaces 4.1.0 Final - PullRequest
3 голосов
/ 27 февраля 2012

Я обновил свой проект до richfaces 4.1.0 и JSF 2.0.Я неожиданно изменил зависимости maven, обновил web.xml ,face-config.xml, перенес из файлов * .jsp в файлы * .xhtml, обновил все заголовок, тело, форму до h: head, h: body, h: form,Однако у меня есть серьезные проблемы с макетом страницы и поведением a4j: ajax.Я думаю, что было бы лучше, если бы я просто перечислил проблемы:

  • Мой богатый: датируемый скин перестал работать.Я даже пытался удалить атрибуты columnClass и т. Д. Из тега, чтобы оставить его с синими обложками по умолчанию, но результат выглядит как простая HTML-таблица (без линий, без фона, без цветов).

  • тег a4j: axjax работает намного хуже, чем тег a4j: support.Для моего selectOneMenus я пробовал event = "change", но это не работает.Только после добавления valueChangedListener к тегам и попытки события = "valueChange" это сработало.

  • rich: элементы календаря не «кликабельны» - когда я перемещаю курсор над кнопкой, чтобы открыть календарь, он не меняется, а когда я нажимаю на кнопку, ничего не происходит.Мне также нужен a4j: ajax здесь, но я не могу его протестировать.

  • Хотя event = "valueChange" работал в selectOneMenu, мое изображение a4j: mediaOutput не перерисовывается.И диаграмма была причиной, по которой я переключился на JSF 2.0, потому что мне нужно было использовать механизм сессионных данных-помощников для загрузки изображений.Есть ли специальный механизм для рендеринга (или теперь «рендеринга» с помощью a4j: ajax) этого элемента, когда он использует session-data-helper для загрузки данных?

Вот сеть.Файлы xml и index.xhtml:

<?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" 
id="WebApp_ID" 
version="2.5">
  <display-name>presentation graph</display-name>

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

    <context-param>
      <param-name>javac.faces.PROJECT_STAGE</param-name>
      <param-value>Development</param-value>
    </context-param>

  <context-param>
        <param-name>org.richfaces.SKIN</param-name>
        <param-value>blueSky</param-value>
    </context-param>

  <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>

  <servlet>
        <servlet-name>Faces Servlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
  <servlet-mapping>
        <servlet-name>Faces Servlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.faces</url-pattern>
  </servlet-mapping>
</web-app>

index.xhtml

<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:a4j="http://richfaces.org/a4j"
      xmlns:rich="http://richfaces.org/rich"
      xmlns:sdh="http://richfaces.org/session-data-helper"> 


<h:head>

         <title>Graph presentation</title>

    <h:outputStylesheet name="style.css" library="css" />
</h:head>

<h:body>
        <h:form id="form">

        <div class="grid_2">
            <rich:calendar value="#{formBean.date}"
                            id="date" popup="true" datePattern="yyyy/MM/dd"
                            showApplyButton="false" cellWidth="24px" cellHeight="22px" style="width:200px"> 
            <a4j:ajax event="change" render="resultTable chart" execute="@this" listener="#{formBean.dateSelected}"/>           
            </rich:calendar>
        </div>

        <div class="grid_2">
         <h:selectOneMenu id="selectMenu" value="#{formBean.model.selected_id}" valueChangeListener="#{formBean.selected}" styleClass="comboBoxes">
            <f:selectItems value="#{formBean.myModelValues}" />
            <a4j:ajax  execute="@this" event="valueChange"  render="resultTable chart"  ajaxSingle="true"/>
         </h:selectOneMenu>
        </div> 

        <div id="list" class="container2">
        <rich:dataTable id="resultTable" value="#{formBean.results}" var="query" rows="10" headerClass="columnclass" rowClasses="rowclass" styleClass="datatable" cellpadding="1" cellspacing="1" rules="rows" >

               <rich:column headerClass="columnclass"  width="100" >
                    <f:facet name="header"> 
                        <h:outputText value="Values" style="align:center; text-align:center; " />
                    </f:facet>
                  <h:outputText value="#{query.val}" />
               </rich:column>            
               <rich:column headerClass="columnclass"  width="100" >
                    <f:facet name="header"> 
                        <h:outputText value="Models" style="align:center; text-align:center; " />
                    </f:facet>
                  <h:outputText value="#{query.model}" />
               </rich:column>    
               <f:facet name="footer">
                   <rich:dataScroller page="#{formBean.page}" style="margin-left: 15%; margin-right: 15%; width: 70%;">
                          <f:facet name="first">
                                    <h:outputText value="First" />
                          </f:facet>
                          <f:facet name="last">
                                    <h:outputText value="Last" />
                          </f:facet>
                    </rich:dataScroller>
                </f:facet>
            </rich:dataTable>
      </div>

      <div id="graph" class="container2">
                    <a4j:mediaOutput 
                         id="chart"
                         element="img"
                         cacheable="false"
                         session="true"
                         createContent="#{mediaPainter.drawChartImage}"
                         value = "#{sdh:storeData(formBean.chartData)}"
                         mimeType="image/jpeg" 
                         />       
      </div>   
           </h:form>
</h:body>
</html>   

. Вот список файлов .jar, развернутых с помощью веб-приложения:

cssparser-0.9.5.jar
mysql-connector-java-5.1.18.jar ehcache-1.6.0.jar
richfaces-components-api-4.1.0.Final.jar guava-r08.jar
richfaces-components-ui-4.1.0.Final.jar javax.faces-2.1.3.jar
richfaces-core-api-4.1.0.Final.jar jcommon-1.0.16.jar
richfaces-core-impl-4.1.0.Final.jar jfreechart-1.0.13.jar
sac-1.3.jar jstl-api-1.2.jar

Вот pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.models.presentation.</groupId>
    <artifactId>graph_presentation</artifactId>
    <name>graph_presentation</name>
    <version>Final</version>
    <packaging>war</packaging>

    <url>http://jboss.org/richfaces</url>

    <repositories>
        <!-- You should seriously consider using a repository manager or declare repositories in your settings.xml.
           See http://www.sonatype.com/people/2009/02/why-putting-repositories-in-your-poms-is-a-bad-idea/   -->
        <repository>
            <id>jboss-public-repository-group</id>
            <name>JBoss Public Maven Repository Group</name>
            <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
            <layout>default</layout>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>jboss-public-repository-group</id>
            <name>JBoss Public Maven Repository Group</name>
            <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
            <layout>default</layout>
            <releases>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>never</updatePolicy>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.6</maven.compiler.source>
        <maven.compiler.target>1.6</maven.compiler.target>
        <!-- Setting this property using archetype-metadata.xml requiredPorperty
             so that generated project uses correct version of richfaces.
         -->
        <org.richfaces.bom.version>4.1.0.Final</org.richfaces.bom.version>
    </properties>

    <build>
        <finalName>individuel_broadcast3</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.richfaces</groupId>
                <artifactId>richfaces-bom</artifactId>
                <version>${org.richfaces.bom.version}</version>
                <scope>import</scope>
                <type>pom</type>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.richfaces.ui</groupId>
            <artifactId>richfaces-components-ui</artifactId>
        </dependency>
        <dependency>
            <groupId>org.richfaces.core</groupId>
            <artifactId>richfaces-core-impl</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.faces</groupId>
            <artifactId>javax.faces-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.faces</artifactId>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.el</groupId>
            <artifactId>el-api</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>jstl-api</artifactId>
        </dependency>

        <dependency>
            <groupId>net.sf.ehcache</groupId>
            <artifactId>ehcache</artifactId>
        </dependency>
        <dependency>
            <groupId>jfree</groupId>
            <artifactId>jfreechart</artifactId>
            <version>1.0.13</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.18</version>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>jee6</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-war-plugin</artifactId>
                        <configuration>
                            <webappDirectory>${project.build.directory}/${project.build.finalName}-jee6</webappDirectory>
                            <classifier>jee6</classifier>
                        </configuration>
                    </plugin>
                </plugins>
            </build>

            <dependencies>
                <dependency>
                    <groupId>javax.faces</groupId>
                    <artifactId>javax.faces-api</artifactId>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>org.glassfish</groupId>
                    <artifactId>javax.faces</artifactId>
                    <scope>provided</scope>
                </dependency>
                <dependency>
                    <groupId>javax.transaction</groupId>
                    <artifactId>jta</artifactId>
                    <version>1.1</version>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
        </profile>
        <profile>
            <id>release</id>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-war-plugin</artifactId>
                        <executions>
                            <execution>
                                <id>jee6</id>
                                <phase>package</phase>
                                <goals>
                                    <goal>war</goal>
                                </goals>
                                <configuration>
                                    <webappDirectory>${project.build.directory}/${project.build.finalName}-jee6</webappDirectory>
                                    <classifier>jee6</classifier>
                                    <packagingExcludes>WEB-INF/lib/javax.faces*</packagingExcludes>
                                    <warSourceExcludes>WEB-INF/lib/javax.faces*</warSourceExcludes>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
...