Tôi đang tìm hiểu về các thành phần phức hợp với JSF 2.0 và tôi muốn thành phần của tôi có thể kích hoạt các phương thức sao lưu đậu, vì vậy tôi đã tạo một ví dụ đơn giản.Thêm các phương thức hành động vào một thành phần phức hợp
Đây là thành phần i tạo:
<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>
này được làm thế nào tôi sử dụng nó trong một trang 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>
Và đây là đậu ủng hộ cung cấp cho hỗ trợ trang có thành phần là
@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;
}
}
Thành phần dường như để làm cho tốt, nhưng khi tôi bấm nút tôi nhận được một ngoại lệ mà nói:
javax.faces.FacesException: Không thể giải quyết phần tổng hợp từ sử dụng trang sử dụng biểu EL '# {cc.attrs.actionMethod} '
Tôi có phạm sai lầm trong giao diện hoặc triển khai thành phần không? Tại sao không hoạt động?
Ups, tôi thấy bây giờ, một sai lầm ngớ ngẩn là gì. Tôi đã tất cả thời gian nhìn vào customComponent nhưng sai lầm của tôi là trong index.xhtml, tôi chỉ viết sai tên của thuộc tính :) Cảm ơn! – sfrj