JSF rendered 属性将定义组件是否应呈现/可见。
如果
<h:commandButton value="Undo" rendered="#{false}" />
然后你上面的Undo 按钮将被隐藏。
rendered 属性可以绑定到ManagedBean 属性。如果你想要这个动态,你必须更新组件才能看到结果。
这是一个小例子:
XHTML:
<h:panelGroup id="doBtnPG">
<h:commandButton value="Do" rendered="#{myBean.showDo}" action="#{myBean.doAction}">
<f:ajax render="unDoBtnPG"/>
</h:commandButton>
</h:panelGroup>
<h:panelGroup id="unDoBtnPG">
<h:commandButton value="Un Do" rendered="#{myBean.showUndo}" action="#{myBean.undoAction}">
<f:ajax render="doBtnPG"/>
</h:commandButton>
</h:panelGroup>
托管豆:
@ManagedBean
@ViewScoped
public class MyBean{
private boolean showDo=true;
private boolean showUndo=true;
public void doAction(){
showUndo=false;
}
public void undoAction(){
showDo=false;
}
//SETTER and GETTERS
}
在上面的例子中,当点击一个按钮时,相应的动作方法使得另一个按钮被渲染的属性为false,f:ajax将重新渲染/更新另一个按钮的panelGroup以反映变化.
由于您将此问题标记为Primefaces,因此这里是 Primefaces 的 XHTML 代码:
<h:panelGroup id="doBtnPG">
<p:commandButton value="Do" rendered="#{myBean.showDo}"
action="#{myBean.doAction}" update="unDoBtnPG"/>
</h:panelGroup>
<h:panelGroup id="unDoBtnPG">
<p:commandButton value="Un Do" rendered="#{myBean.showUndo}"
action="#{myBean.undoAction}" update="doBtnPG"/>
</h:panelGroup>
请注意,在 Primefaces commandButtons 上,您不需要明确使用 f:ajax 或 p:ajax,因为它们默认是 Ajax。
请注意,Primefaces 提供的函数enable() 和disable() 只是客户端。当disabled 属性为false 并且如果您使用enable() 启用按钮,它将不会触发您的操作方法。