我是JSF(PrimeFaces)的新手。
我有两个 commandButtons 执行和撤消。我希望一次只能看到一个按钮。
之类的,当我单击“执行”按钮时,单击“执行”按钮应该隐藏(同时执行其操作),并且应该可以看到“撤消”按钮 当我单击“撤消”按钮时,单击它应该隐藏,“执行”按钮应该恢复活动
我尝试过使用 enable()和disable()方法但没有用。 我能帮助你实现这个目标吗?任何预定义方法可用?
听到呈现的属性会有所帮助,但无法理解该属性究竟会做什么。 有人可以解释一下吗
答案 0 :(得分:5)
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:
@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
将重新呈现/更新另一个按钮&#39; s 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()
启用该按钮,则不会触发您的操作方法。