2016-02-16 30 views
1

PrimeFaces LazyDataModel在將OmniFaces jar添加到pom.xml之前工作。 它調用load()方法LazyDataModelPrimeFaces LazyDataModel在添加OmniFaces後,不再調用load()方法

LazyPostDataModel.java

public class LazyPostDataModel extends LazyDataModel<Post> { 
    private PostService postService; 
    private PostCriteria postCriteria; 

    public LazyPostDataModel(PostService postService, PostCriteria postCriteria) { 
     this.postCriteria = postCriteria; 
     this.postService = postService; 
    } 

    @Override 
    public List<Post> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String,Object> filters) { 
     //other process 
    } 
} 

我只是添加下面的依賴到的pom.xml的OmniFaces。它不調用load()方法。

<dependency> 
    <groupId>org.omnifaces</groupId> 
    <artifactId>omnifaces</artifactId> 
    <version>2.2</version> 
</dependency> 

post.xhtml

<h:form id="postTableForm"> 
    <p:inputText value="#{ManagePostActionBean.postCriteria.name}"/> 
    <p:commandButton value="Search" action="#{ManagePostActionBean.search}" update="postTable"/> 
    <p:outputPanel id="listPanel"> 
     <p:dataTable var="post" value="#{ManagePostActionBean.postDataModel}" id="postTable" 
      paginator="true" style="width:100%;" lazy="true" 
      rows="10" 
      paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}" 
      rowsPerPageTemplate="10, 20, 30, 40, 50, 100" rowIndexVar="index"> 
      <p:column headerText="No" style="width:50px;"> 
       <h:outputText value="#{index + 1}" /> 
      </p:column> 
      <p:column headerText="Name"> 
       <h:outputText value="#{post.name}" /> 
      </p:column> 
      <p:column headerText="Description"> 
       <h:outputText value="#{post.description}" /> 
      </p:column> 
     </p:dataTable> 
    </p:outputPanel> 
</h:form> 

ManagePostActionBean.java

@Named(value = "ManagePostActionBean") 
@ViewScoped 
public class ManagePostActionBean { 
    @Inject 
    private PostService postService; 
    private LazyDataModel<Post> postDataModel; 
    private PostCriteria postCriteria; 

    public void onLoad() { 
     System.out.println("ManagePostActionBean Init...."); 
     postCriteria = new PostCriteria(); 
     postDataModel = new LazyPostDataModel(postService, postCriteria); 
    } 

    public LazyDataModel<Post> getPostDataModel() { 
     return postDataModel; 
    } 

    public PostCriteria getPostCriteria() { 
     return postCriteria; 
    } 

    public void setPostCriteria(PostCriteria postCriteria) { 
     this.postCriteria = postCriteria; 
    } 

    public void search() { 
     resetPagination(); 
     postDataModel = new LazyPostDataModel(postService, postCriteria); 
    } 
} 

我的環境是

JSF 2.2 
Primefaces 5.0 
JDK 1.7 
apache-tomee-webprofile-1.7.3 (TomEE) 

的pom.xml

<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>com.mutu</groupId> 
    <artifactId>spring-primefaces</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <repositories> 
     <repository> 
      <id>prime-repo</id> 
      <name>PrimeFaces Maven Repository</name> 
      <url>http://repository.primefaces.org</url> 
      <layout>default</layout> 
     </repository> 
    </repositories> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>4.1.6.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>4.1.6.RELEASE</version> 
     </dependency>  
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.1.6.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</artifactId> 
      <version>4.1.6.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>4.1.6.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>4.1.6.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-test</artifactId> 
      <version>4.1.6.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mybatis</groupId> 
      <artifactId>mybatis</artifactId> 
      <version>3.3.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mybatis</groupId> 
      <artifactId>mybatis-spring</artifactId> 
      <version>1.2.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mybatis.generator</groupId> 
      <artifactId>mybatis-generator-maven-plugin</artifactId> 
      <version>1.3.2</version> 
     </dependency>  
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-impl</artifactId> 
      <version>2.2.8-02</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.faces</groupId> 
      <artifactId>jsf-api</artifactId> 
      <version>2.2.8-02</version> 
     </dependency> 
     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>5.0</version> 
     </dependency> 
     <dependency> 
      <groupId>org.primefaces.themes</groupId> 
      <artifactId>all-themes</artifactId> 
      <version>1.0.10</version> 
     </dependency>  
     <dependency> 
      <groupId>org.primefaces.themes</groupId> 
      <artifactId>green-cool</artifactId> 
      <version>1.0</version> 
     </dependency>  
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
      <version>3.4</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-io</groupId> 
      <artifactId>commons-io</artifactId> 
      <version>2.4</version> 
     </dependency> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.8</version> 
     </dependency> 
     <dependency> 
      <groupId>joda-time</groupId> 
      <artifactId>joda-time</artifactId> 
      <version>2.8.1</version> 
     </dependency> 
     <dependency> 
      <groupId>com.zaxxer</groupId> 
      <artifactId>HikariCP</artifactId> 
      <version>2.4.1</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-fileupload</groupId> 
      <artifactId>commons-fileupload</artifactId> 
      <version>1.3</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.6.1</version> 
     </dependency>  
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.0.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.quartz-scheduler</groupId> 
      <artifactId>quartz</artifactId> 
      <version>2.2.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.omnifaces</groupId> 
      <artifactId>omnifaces</artifactId> 
      <version>2.2</version> 
     </dependency> 
    </dependencies> 
</project> 
+0

您是否在TomEE中手動將JSF從2.1升級到2.2?如果是這樣,究竟如何?默認情況下,TomEE 1.x不是JSF 2.2,而是JSF 2.1,然後您應該使用OmniFaces 1.x而不是2.x,或者將服務器遷移到TomEE 7.x. – BalusC

+0

@BalusC我只是手動在pom.xml中添加com.sun.face 2.2。它不行嗎? – CycDemo

+0

否......'provided'意思是「目標運行時(appserver)已經提供它」。此外,TomEE 1.x提供了Apache MyFaces(org.apache.myfaces),而不是Oracle Mojarra(com.sun.faces)。我只是感到驚訝,你沒有看到部署過程中的例外,因爲這個密切相關的問題:http://stackoverflow.com/q/35226794 – BalusC

回答

1

您正在使用隨JSF 2.1(Apache MyFaces)提供的TomEE 1.x。

OmniFaces 2.2 requires JSF 2.2。

你有2種選擇:

  1. 下調至2.1 OmniFaces。儘管OmniFaces 2.x正式需要JSF 2.2,但OmniFaces 2.0和2.1版本沒有部署時間的JSF 2.2依賴關係。 OmniFaces版本2.2與<o:viewAction>標記第一個版本以在部署期間需要JSF 2.2。

  2. 升級到TomEE 7.x,這是第一個實現Java EE 7的版本,因此也是固有的JSF 2.2。目前只有available作爲M1發佈。最終版本預計在幾個月內。

相關問題