Jay*_*y K 1 jsf primefaces jsf-2
我想要一个UIComponent在 PrimeFaces 3.4 中通过 id 查找的方法。我已经找到了一个方法来执行此操作,但它有一个方法visitTree(在PrimeFaces 5.2中可用),该方法不适用于PrimeFaces 3.4。
请有人帮我在下面的 XHTML 中找到面板对象。
<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:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<h:form id="form">
<p:panel id="pnl"><h:outputText value="Yahoooo...."></h:outputText></p:panel>
<p:commandButton ajax="false" value="Toggle" actionListener="#{myBean.mytoggle}"/>
</h:form>
</h:body>
</html>
Run Code Online (Sandbox Code Playgroud)
Primefaces 5.2工作方法
public UIComponent findComponent(final String id) {
FacesContext context = FacesContext.getCurrentInstance();
UIViewRoot root = context.getViewRoot();
final UIComponent[] found = new UIComponent[1];
root.visitTree(new FullVisitContext(context), new VisitCallback() {
@Override
public VisitResult visit(VisitContext context, UIComponent component) {
if(component.getId().equals(id)){
found[0] = component;
return VisitResult.COMPLETE;
}
return VisitResult.ACCEPT;
}
});
return found[0];
}
Run Code Online (Sandbox Code Playgroud)
该UIComponent#visitTree()方法并不特定于任何 PrimeFaces 版本。它特定于 JSF 2.0。它在 JSF 2.x 之上运行的任何 PrimeFaces 版本上都应该同样有效。仅当您实际运行 JSF 1.x 时,它才会失败。
即便如此,标准 JSF API 已经提供了UIViewRoot#findComponent()这项工作,它只需要客户端 ID,而不需要组件 ID。
UIViewRoot view = FacesContext.getCurrentInstance().getViewRoot();
UIComponent component = view.findComponent("form:pnl");
// ...
Run Code Online (Sandbox Code Playgroud)
尽管如此,这对于您的问题来说是错误的解决方案。您似乎有兴趣对其进行setRendered(boolean)调用。你根本不应该这样做。您不应该对模型一侧的视图感兴趣。反过来做。您应该设置一个模型值,视图又应绑定到该模型值。
这是一个启动示例:
<h:form>
<p:panel rendered="#{not bean.hidden}">
<h:outputText value="Yahoooo...." />
</p:panel>
<p:commandButton value="Toggle" action="#{bean.toggle}" update="@form" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
bean 中只有这个:
private boolean hidden;
public void toggle() {
hidden = !hidden;
}
public boolean isHidden() {
return hidden;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6937 次 |
| 最近记录: |