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

我正在学习有关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操作方法:

<custom:demoCustomComponent ... actionBtn="#{demoBB.act}"/> 

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

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

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

以上是 将动作方法添加到复合组件 的全部内容, 来源链接: utcz.com/qa/262934.html

回到顶部