• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

将动作方法添加到复合组件

java 来源:sfrj 6次浏览

我正在学习有关JSF 2.0的复合组件,并且我希望我的组件能够从支持bean中触发方法,因此我创建了一个简单示例,但出现了一些错误。将动作方法添加到复合组件

这是我创建的组件:

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://java.sun.com/jsf/html" 
xmlns:composite="http://java.sun.com/jsf/composite"> 

<composite:interface> 
     <composite:attribute name="attribute1"/> 
     <composite:attribute name="attribute2"/> 
     <composite:attribute name="actionBtnText"/> 
     <composite:attribute name="actionMethod" method-signature="java.lang.String action()"/> 
</composite:interface> 

<composite:implementation> 
    <h:form> 
      <h:inputText value="#{cc.attrs.attribute1}"/> 
      <br/> 
      <h:inputText value="#{cc.attrs.attribute2}"/> 
      <br/> 
      <h:commandButton action="#{cc.attrs.actionMethod}" value="#{cc.attrs.actionBtnText}"/>   
    </h:form> 

</composite:implementation> 

</html> 

这是我如何使用它在JSF页面

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:custom="http://java.sun.com/jsf/composite/custom"> 

... 

    <h:body> 
    <custom:demoCustomComponent attribute1="#{demoBB.value1 }" attribute2="#{demoBB.value2 }" actionBtnText="Button text!" actionBtn="#{demoBB.act}"/> 
    </h:body> 

这是支持Bean给予支持组件所在的页面

@Named("demoBB") 
@RequestScoped 
public class DemoBB { 

    private String value1; 
    private String value2; 
    public String getValue1() { 
     return value1; 
    } 

    public String act() { 
     System.out.println("Input 1: " + value1 + "\nInput 2: " + value2); 
     return null; 
    } 

    //Getters and setters 
    public void setValue1(String value1) { 
     this.value1 = value1; 
    } 
    public String getValue2() { 
     return value2; 
    } 
    public void setValue2(String value2) { 
     this.value2 = value2; 
    } 
} 

组件似乎呈现罚款,但是当我按下按钮,我得到的是说,一个例外:

javax.faces.FacesException:无法使用页面使用EL表达式从 解决复合材料部件“# {cc.attrs.actionMethod}’

我在组件的接口或实现中犯了什么错误吗?为什么不起作用?

===========解决方案如下:

您definied使用属性名actionBtn操作方法:

<code class="prettyprint-override"><custom:demoCustomComponent ... actionBtn="#{demoBB.act}"/> 
</code>

,但你希望它是属性名称actionMethod

<code class="prettyprint-override"><composite:attribute name="actionMethod" method-signature="java.lang.String action()"/> 
</code>

对齐。他们应该是一样的。


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)