在jsf

时间:2016-03-14 17:28:27

标签: jsf primefaces

我是JSF(PrimeFaces)的新手。

我有两个 commandButtons 执行和撤消。我希望一次只能看到一个按钮。

之类的,当我单击“执行”按钮时,单击“执行”按钮应该隐藏(同时执行其操作),并且应该可以看到“撤消”按钮 当我单击“撤消”按钮时,单击它应该隐藏,“执行”按钮应该恢复活动

我尝试过使用 enable()和disable()方法但没有用。  我能帮助你实现这个目标吗?任何预定义方法可用?

听到呈现的属性会有所帮助,但无法理解该属性究竟会做什么。 有人可以解释一下吗

1 个答案:

答案 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:ajaxp:ajax,因为默认情况下它们是Ajax。

请注意,Primefaces提供的功能enable()disable()只是客户端。如果disabled属性为false,并且您使用enable()启用该按钮,则不会触发您的操作方法。