在jsf中隐藏和显示commandButton

Aki*_*rah 5 jsf primefaces

我是JSF(PrimeFaces)的新手.

我有两个commandButtons Do和Undo.我希望一次只能看到一个按钮.

比如,当我单击"执行"按钮时,单击"执行"按钮应该隐藏(同时执行其操作),撤消按钮应该是可见的,当我单击"撤消"按钮时,单击它应该隐藏,"执行"按钮应该恢复为活动状态

我尝试使用enable()和disable()方法,但没有用.我可以帮助实现这一目标吗?任何预定义方法可用?

听到渲染的属性将有所帮助,但无法理解该属性究竟会做什么.有人可以解释一下

Kis*_*ash 8

JSF rendered属性将定义组件是否应该呈现/可见.
如果

<h:commandButton value="Undo" rendered="#{false}" />
Run Code Online (Sandbox Code Playgroud)

然后您的上方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>
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

在上述例子中,在点击一个按钮相应的操作方法,使在其上的其它按钮被呈现为属性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>
Run Code Online (Sandbox Code Playgroud)

请注意,在Primefaces上,commandButtons您不需要使用f:ajaxp:ajax显式,因为默认情况下它们是Ajax.

请注意,功能enable()disable()通过Primefaces提供了唯一的客户端.当disabled属性为false,如果您启用该按钮enable(),则不会触发您的操作方法.