2016-03-14 2 views
3

Я новичок в JSF (PrimeFaces).скрытие и отображение commandButton в jsf

У меня есть два commandButtons Do and Undo. Я хочу, чтобы только одна кнопка была видна за один раз.

как, когда я нажимаю кнопку Do, onclicking кнопка Do должна скрывать (выполнение его действия одновременно) и Undo кнопка должна быть виден и когда я нажимаю кнопку Undo onclicking она должна скрыть и кнопку Do должна вернуться к активным

Я пробовал использовать методы enable() и disable(), но был бесполезен. Могу ли я получить некоторую помощь в этом. любые предопределенные методы доступны?

Heard оказанный атрибут поможет, но не может понять, что именно будет делать этот атрибут. Может кто-нибудь объяснить PLS

+0

Атрибут указывает, является ли компонент визуализированным или нет, не следует путать с атрибутом 'disabled', который делает компонент визуализированным, но не пригодным для использования (в вашем случае можно щелкнуть). Не могли бы вы предоставить код для двух кнопок? – sinclair

ответ

3

Атрибут 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 будет отображать/обновлять другую кнопку panelGroup, чтобы отразить изменения.

Поскольку вы отметили этот вопрос, как Primefaces, вот код XHTML для Primefaces:

<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 по умолчанию.

Обратите внимание, что функции enable() и disable(), предоставляемые Prime, являются только клиентскими. Если атрибут disabled равен false, и если вы включите кнопку с помощью enable(), она не будет запускать ваш метод действий.

+0

ohh ..thanks .. так что вы предлагаете? – Akirah

Смежные вопросы