Tôi đang làm việc với trang tổng quan động nơi người dùng có thể ghim và xóa các mục theo ý muốn. Bây giờ tôi có một vấn đề mà tôi muốn thêm thành phần hỗn hợp hiện có vào khung nhìn từ bean sao lưu. Tôi đã cố gắng tìm cách chính xác để làm điều này từ internet nhưng không thành công cho đến nay. Đây là thành phần hỗn hợp đơn giản tôi muốn thêm:Tạo và thêm thành phần hỗn hợp theo cách lập trình trong bean sao lưu
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:cc="http://java.sun.com/jsf/composite"
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:p="http://primefaces.org/ui"
xmlns:composite="http://java.sun.com/jsf/composite">
<!-- INTERFACE -->
<cc:interface>
</cc:interface>
<!-- IMPLEMENTATION -->
<cc:implementation>
<h:outputText value="TEST"/>
</cc:implementation>
</html>
Đây là mã mà nên trả lại các thành phần tổng hợp:
public static UIComponent getCompositeComponent(String xhtml, String namespace) {
FacesContext fc = FacesContext.getCurrentInstance();
Application app = fc.getApplication();
Resource componentResource = app.getResourceHandler().createResource(xhtml, namespace);
UIPanel facet = (UIPanel) app.createComponent(UIPanel.COMPONENT_TYPE);
facet.setRendererType("javax.faces.Group");
UIComponent composite = app.createComponent(fc, componentResource);
composite.getFacets().put(UIComponent.COMPOSITE_FACET_NAME, facet);
return composite;
}
Và đây là làm thế nào tôi đang sử dụng các chức năng:
Column column = new Column();
UIComponent test = HtmlUtil.getCompositeComponent("test.xhtml", "comp");
column.getChildren().add(test);
Nhưng không có gì được hiển thị bên trong cột. Bất kỳ ý tưởng làm thế nào điều này có thể được thực hiện? Tôi không muốn đi với cách render = "# {bean.isThisRendered}" bởi vì nó không phù hợp với trường hợp sử dụng của tôi.
Ra quan tâm (chủ đề được khủng khiếp xấu bao phủ và điều này sẽ mang lại cho tôi nhiều năm phía trước ánh sáng): Có thì bạn gọi các 3-liner gọi 'HtmlUtil.getCompositeComponent'? –