我正在设计一个带有程序控制面板(如 iGoogle)的仪表板。到目前为止,一切都很好。在某些面板中我想显示提要,所以我使用 p:feedReader。
如果我创建一个带有内部提要阅读器的面板的页面,它可以正常工作。所以我使用了正确的库。
当我尝试以编程方式创建提要阅读器时,它不显示提要标题和内容。
我的测试页面:
<!DOCTYPE html>
<html xmlns="http://www.w3c.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui">
<f:view contentType="text/html">
<h:head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
<meta http-equiv="refresh" content="600" />
<link type="text/css" rel="stylesheet" href="styles/app.css" />
<title>Test Panel</title>
</h:head>
<h:body>
<f:event type="preRenderView" listener="#{panelBean.Init}" />
<h:form id="frmPortal">
<p:growl id="growl" showDetail="true" />
<p:panel id="head" style="width: 1900; height: 100px; border: none; background: transparent;">
</p:panel>
<p:commandButton id="Test" value="Test" action="#{panelBean.Test}" style="margin-left: 20px;" />
<p:commandButton id="Update" value="Update" action="#{panelBean.Test}" style="margin-left: 20px;" update="Feed1"/>
</h:form>
</h:body>
</f:view>
</html>
我的豆子:
@ManagedBean(name="panelBean")
@ViewScoped
public class PanelBean implements Serializable {
private static final long serialVersionUID = 403660770777505739L;
private boolean renderPanel;
private FeedReader feedReader;
public void Init() {
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
UIComponent component = viewRoot.findComponent("frmPortal");
if (component == null) {
System.out.println("Component is null");
} else {
System.out.println("Component is NOT null");
Panel p = new Panel();
p.setClosable(true);
p.setHeader("Test");
p.setId("Panel1");
p.setVisible(true);
feedReader = new FeedReader();
feedReader.setId("Feed1");
feedReader.setRendered(true);
feedReader.setSize(5);
feedReader.setValue("http://barrapunto.com/barrapunto.rss");
feedReader.setVar("feed");
HtmlOutputText outPutText = new HtmlOutputText();
outPutText.setValue("#{feed.title}");
p.getChildren().add(feedReader);
component.getChildren().add(p);
RequestContext context = RequestContext.getCurrentInstance();
context.update("frmPortal");
}
renderPanel = true;
}
public boolean isRenderPanel() {
return renderPanel;
}
public void setRenderPanel(boolean renderPanel) {
this.renderPanel = renderPanel;
}
public void Test() {
UIViewRoot viewRoot = FacesContext.getCurrentInstance().getViewRoot();
UIComponent component = viewRoot.findComponent("frmPortal");
if (component == null) {
System.out.println("Component is null");
} else {
System.out.println(component.getChildren().get(0).getId());
System.out.println(component.getChildren().get(1).getId());
System.out.println(component.getChildren().get(2).getId());
System.out.println(component.getChildren().get(3).getId());
System.out.println(component.getChildren().get(4).getId());
Panel panel = (Panel) component.getChildren().get(4);
FeedReader feed = (FeedReader) panel.getChildren().get(0);
if (feed == null) {
System.out.println("FeedReader is null");
} else {
System.out.println(feed.getId() + " - Size: " + feed.getSize() + " - Value: " + feed.getValue() + " - Var: " + feed.getVar());
}
}
}
}