2012-06-07 89 views
2

我设法使用Primefaces运行WAB软件包。问题是,有些示例正在运行,并且一些示例在尝试实施时遇到问题。我测试了这个例子:尝试实施Primefaces时出错示例

<?xml version='1.0' encoding='UTF-8' ?> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"  
      xmlns:h="http://java.sun.com/jsf/html" 
      xmlns:f="http://java.sun.com/jsf/core" 
      xmlns:ui="http://java.sun.com/jsf/facelets" 
      xmlns:p="http://primefaces.org/ui" > 
     <h:head> 
      <ui:insert name="header">   
       <ui:include src="header.xhtml"/>   
      </ui:insert> 
     </h:head> 
     <h:body> 

      <h1><img src="resources/css/images/icon.png" alt="NVIDIA.com" /> History Center</h1> 
      <!-- layer for black background of the buttons --> 
      <div id="toolbar" style="margin: 0 auto; width:1180px; height:30px; position:relative; background-color:black"> 
       <!-- Include page Navigation --> 
       <ui:insert name="Navigation">   
        <ui:include src="Navigation.xhtml"/>   
       </ui:insert> 

      </div> 

      <div id="logodiv" style="position:relative; top:35px; left:0px;"> 
       <h:graphicImage alt="Demo edit form" style="position:relative; top:-20px; left:9px;" value="resources/images/logo_linuxz.png" /> 
      </div> 
      <div id="main" style="margin: 0 auto; width:1190px; height:700px; position:absolute; background-color:transparent; top:105px"> 

       <div id="mainpage" style="margin: 0 auto; width:1190px; height:500px; position:absolute; background-color:transparent; top:80px"> 

        <div id="settingsHashMap" style="width:350px; height:400px; position:absolute; background-color:r; top:20px; left:1px"> 

         <h:form> 

          <p:growl id="growl" showDetail="true" sticky="true" /> 

          <p:panel header="Growl"> 
           <h:panelGrid columns="2"> 
            <h:outputText value="Your Name: *" /> 
            <p:inputText value="#{LinuxController.text}" required="true" label="Name"/> 
           </h:panelGrid> 

           <p:commandButton value="Save" actionListener="#{LinuxController.save}" update="growl"/> 
          </p:panel> 

         </h:form> 


        </div> 

       </div> 
      </div> 

     </h:body> 
    </html> 

import javax.faces.bean.ViewScoped; 

import java.io.Serializable; 

import javax.faces.application.FacesMessage; 
import javax.faces.context.FacesContext; 

// Update form example 
@Named("LinuxController") 
@ViewScoped 
public class Linux implements Serializable { 

    public Linux() { 
    } 

    private String text; 

    public String gettext() { 
     return text; 
    } 
    public void settext(String text) { 
     this.text = text; 
    } 

    public void save(ActionEvent actionEvent) { 
     FacesContext context = FacesContext.getCurrentInstance(); 

     context.addMessage(null, new FacesMessage("Successful", "Hello " + text)); 
     context.addMessage(null, new FacesMessage("Second Message", "Additional Info Here...")); 
    } 

} 

这是POM文件:

<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.DX_57</groupId> 
    <artifactId>History-Module-57</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>war</packaging> 

    <name>History-Module-57</name> 

    <properties> 
     <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 


     <dependency> 
      <groupId>org.primefaces</groupId> 
      <artifactId>primefaces</artifactId> 
      <version>3.3</version> 
      <type>jar</type> 

     </dependency> 

     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.8.2</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.osgi</groupId> 
      <artifactId>org.osgi.core</artifactId> 
      <version>4.3.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.osgi</groupId> 
      <artifactId>org.osgi.compendium</artifactId> 
      <version>4.2.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish</groupId> 
      <artifactId>osgi-cdi-api</artifactId> 
      <version>3.1-b41</version> 
      <type>jar</type> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.glassfish</groupId> 
      <artifactId>javax.faces</artifactId> 
      <version>2.1.9</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-web-api</artifactId> 
      <version>6.0</version> 
      <scope>provided</scope> 

     </dependency> 
    </dependencies> 

    <build> 
     <pluginManagement> 

      <plugins> 
       <plugin> 
        <groupId>org.apache.felix</groupId> 
        <artifactId>maven-bundle-plugin</artifactId> 
        <version>2.3.7</version> 
        <extensions>true</extensions> 
        <configuration> 
         <supportedProjectTypes> 
          <supportedProjectType>ejb</supportedProjectType> 
          <supportedProjectType>war</supportedProjectType> 
          <supportedProjectType>bundle</supportedProjectType> 
          <supportedProjectType>jar</supportedProjectType> 
         </supportedProjectTypes> 
         <instructions> 
          <!-- Read all OSGi configuration info from this optional file --> 
          <_include>-osgi.properties</_include> 
          <!-- By default, we don't export anything --> 
          <Export-Package></Export-Package> 
          <DynamicImport-Package>*</DynamicImport-Package> 
          <Import-Package>*;resolution:=optional</Import-Package> 
          <Embed-Dependency>*;scope=compile|runtime;inline=false</Embed-Dependency> 
          <Embed-Transitive>true</Embed-Transitive> 
          <Embed-Directory>WEB-INF/lib/</Embed-Directory> 
          <Embed-StripVersion>false</Embed-StripVersion> 
          <Embed-StripGroup>true</Embed-StripGroup> 
          <Bundle-ClassPath>.,WEB-INF/classes</Bundle-ClassPath> 
         </instructions> 
        </configuration> 
        <executions> 
         <execution> 
          <id>bundle-manifest</id> 
          <phase>process-classes</phase> 
          <goals> 
           <goal>manifest</goal> 
          </goals> 
         </execution> 
         <execution> 
          <id>bundle-install</id> 
          <phase>install</phase> 
          <goals> 
           <goal>install</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 

       <plugin> <!-- Need to use this plugin to build war files --> 
        <artifactId>maven-war-plugin</artifactId> 
        <groupId>org.apache.maven.plugins</groupId> 
        <!-- Use version 2.1-beta-1, as it supports the new property failOnMissingWebXml --> 
        <version>2.2</version> 
        <configuration> 
         <archive> 
          <!-- add bundle plugin generated manifest to the war --> 
          <manifestFile> 
           ${project.build.outputDirectory}/META-INF/MANIFEST.MF 
          </manifestFile> 
          <!-- For some reason, adding Bundle-ClassPath in maven-bundle-plugin 
          confuses that plugin and it generates wrong Import-Package, etc. 
          So, we generate it here. 
          --> 
          <manifestEntries> 
           <Bundle-ClassPath>WEB-INF/classes/ 
           </Bundle-ClassPath> 
          </manifestEntries> 
         </archive> 
        <!-- We don't have a web.xml --> 
         <failOnMissingWebXml>false</failOnMissingWebXml> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-dependency-plugin</artifactId> 
       <version>2.4</version> 
       <executions> 
        <execution> 
         <phase>validate</phase> 
         <goals> 
          <goal>copy</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${endorsed.dir}</outputDirectory> 
          <silent>true</silent> 
          <artifactItems> 
           <artifactItem> 
            <groupId>javax</groupId> 
            <artifactId>javaee-endorsed-api</artifactId> 
            <version>6.0</version> 
            <type>jar</type> 
           </artifactItem> 
          </artifactItems> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.4</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
        <compilerArguments> 
         <endorseddirs>${endorsed.dir}</endorseddirs> 
        </compilerArguments> 
       </configuration> 
      </plugin> 
      <plugin> 
       <!-- Enable this plugin for all modules --> 
       <groupId>org.apache.felix</groupId> 
       <artifactId>maven-bundle-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 
    <repositories> 
     <repository> 
      <id>glassfish-repo</id> 
      <name>The Glassfish repository</name> 
      <url>http://download.java.net/maven/glassfish/</url> 
     </repository> 
     <repository> 
      <id>prime-repo</id> 
      <name>PrimeFaces Maven Repository</name> 
      <url>http://repository.primefaces.org</url> 
      <layout>default</layout> 
     </repository> 
    </repositories> 
    <description>Module History Module</description> 
</project> 

我只得到错误信息。我在Glassfish中得到这个错误堆栈:

[#|2012-06-07T15:45:52.438+0300|SEVERE|glassfish3.1.2|javax.faces.event|_ThreadID=339;_ThreadName=Thread-2;|Received 'javax.el.MethodNotFoundException' when invoking action listener '#{LinuxController.save}' for component 'j_idt17'|#] 

[#|2012-06-07T15:45:52.439+0300|SEVERE|glassfish3.1.2|javax.faces.event|_ThreadID=339;_ThreadName=Thread-2;|javax.el.MethodNotFoundException: Method not found: [email protected]() 
    at com.sun.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:160) 
    at com.sun.el.parser.AstValue.invoke(AstValue.java:251) 
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302) 
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153) 
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) 
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:300) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:722) 
|#] 

[#|2012-06-07T15:45:52.439+0300|SEVERE|glassfish3.1.2|javax.enterprise.resource.webcontainer.jsf.context|_ThreadID=339;_ThreadName=Thread-2;|JSF1073: javax.faces.event.AbortProcessingException caught during processing of INVOKE_APPLICATION 5 : UIComponent-ClientId=j_idt12:j_idt17, Message=Method not found: [email protected]()|#] 

[#|2012-06-07T15:45:52.440+0300|SEVERE|glassfish3.1.2|javax.enterprise.resource.webcontainer.jsf.context|_ThreadID=339;_ThreadName=Thread-2;|Method not found: [email protected]() 
javax.faces.event.AbortProcessingException: Method not found: [email protected]() 
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:182) 
    at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) 
    at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:300) 
    at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) 
    at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) 
    at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) 
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) 
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) 
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) 
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1542) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:281) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175) 
    at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:655) 
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161) 
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:331) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:231) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper$AdapterCallable.call(ContainerMapper.java:317) 
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:195) 
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849) 
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746) 
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045) 
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228) 
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104) 
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90) 
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79) 
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54) 
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59) 
    at com.sun.grizzly.ContextTask.run(ContextTask.java:71) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532) 
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: javax.el.MethodNotFoundException: Method not found: [email protected]() 
    at com.sun.el.util.ReflectionUtil.getMethod(ReflectionUtil.java:160) 
    at com.sun.el.parser.AstValue.invoke(AstValue.java:251) 
    at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:302) 
    at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153) 
    ... 33 more 
|#] 

什么可能会导致此问题?

UPDATE

我改变了托管bean的他的名字。事实证明,该框架正在搜索托管bean的错误名称 - avax.el.MethodNotFoundException: Method not found: [email protected]()。应该是avax.el.MethodNotFoundException: Method not found: [email protected]()这是一个配置问题吗?

回答

6

这是因为ViewScoped在CDI中不是本机支持的。要么将@Named("LinuxController")更改为@ManagedBean(name="LinuxController")以使其成为纯JSF,要么将ViewScoped更改为其他类似Seam的ConversationalScope或SessionScope(或者您的情况下,我认为RequestScope就好)

P.S.另外,请检查您是否正确实施包动作事件,一次我花了两个小时,发现我有java.awt.event.ActionEvent中而不是从JSF正确的:-)

编辑

那么你究竟尝试了什么?你是否改变了bean的范围,使它成为ManagedBean而不是CDI bean,在页面和bean中都改变了方法名称?或者你可以创建另一个具有相同签名的bean并尝试重现错误。另外尝试为文本变量赋值,以查看方法getText是否正在工作。在尝试缩小可能的选择范围之前,很难说哪里会出现问题。

SOLUTION

好了,我希望我找到你的解决方案。您应该决定是否要使用CDI或纯JSF。如果你想采用CDI方式,请保留注释为@Named的bean并使用其他范围,然后使用ViewScoped。如果您选择JSF方式,则将@Named更改为@ManagedBean,您可以保留它ViewScoped。在这两种情况下,您都应该删除faces-config.xml中的管理bean记录,因此之前的JSF 1.2需要使用,所以现在不推荐使用它(并且不能在配置中同时使用注释和记录,您必须选择其中一个选项)。

您还需要改善您的导入。正如我以前写的,你有一个java.awt.ActionEvent的进口,但你需要javax.faces.event.ActionEvent。另请注意,如果您使用CDI,然后从javax.enterprise.context.*包(请参阅ViewScope缺失)中导入所有范围注释(RequestScoped,SessionScoped,...),并且如果想要与ManagedBean一起使用JSF,则导入从javax.faces.bean.*开始的所有内容。你不能将它们混合在一起,因为那样你会得到一些奇怪的错误,比如你所拥有的错误。

Here是更改后的文件。

你也应该遵循Java convetion和使用CamelCase命名你的方法(即不gettext的()的getText())。这对于JSF表达式语言尤其重要,因为您需要setter和getter来访问页面上的bean属性,并且这些方法应该用CamelCase编写,因此JSF EL可以解析它们。

+0

ViewScoped在CDI中不起作用?我认为这是CDI与Spring的优点之一,因为我确信Spring不允许使用ViewScoped功能。 –

+0

不工作。为什么Glassfish正在搜索'[email protected]​​c4.save()'?它应该是'com.DX_57.HM_57.LinuxController.save()' – user1285928

+0

任何想法或建议? – user1285928