2013-02-17 37 views
0

我遇到了涉及複合組件和操作方法的myfaces 2.1.10(與TomEE一起打包)的奇怪問題。從本質上講,看下面的例子,myfaces似乎認爲action方法是一個屬性,而拋出一個ElException異常。這個相同的代碼適用於Mojarra(在jBoss 7.1.2下)。複合組件中的myfaces操作方法拋出

任何想法我做錯了什麼?

例外:

javax.el.ELException: /index.xhtml: Property 'act' not found on type com.company.dept.beans.SomeBean 
org.apache.myfaces.view.facelets.compiler.AttributeInstruction.write(AttributeInstruction.java:55) 
    org.apache.myfaces.view.facelets.compiler.UIInstructions.encodeBegin(UIInstructions.java:46) 
    org.apache.myfaces.view.facelets.compiler.UILeaf.encodeAll(UILeaf.java:505) 
    javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:541) 
    javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:541) 
    org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1981) 
    org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:285) 
    javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:59) 
    org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:116) 
    org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:241) 
    javax.faces.webapp.FacesServlet.service(FacesServlet.java:199) 

複合組件命名爲 「菜單」:

<composite:interface displayName="Navigation Menu Bar" shortDescription="Navigation menu bar">   
     <composite:attribute name="action" method-signature="java.lang.String action()"/> 
    </composite:interface> 

    <composite:implementation> 
    <div id="#{cc.clientId}:menuComponent"> 
     <h:form> 
      <h:commandButton action="#{cc.attrs.action}" value="execute action" /> 
     </h:form> 
    </div> 
    </composite:implementation> 

以下頁面使用上面

<h:head> 
</h:head> 
<h:body> 
    <menu:menu action="#{someBean.act}"/> 
</h:body> 
</html> 

背襯豆與動作方法的組件

package com.company.dept.beans; 

import javax.inject.Named; 

@Named 
public class SomeBean { 

    public String act() { 
     System.out.println("ACT CALLED"); 
     return "SUCCESS"; 
    } 

} 

回答

0

這是由於應用程序的打包方式。其中一個包含xhtml的jar文件丟失了faces-config.xml文件,導致MyFaces無法找到它。奇怪的是,莫哈拉似乎並不在乎......

相關問題