Как включить/отключить командную кнопку JSF

Сценарий выглядит так:

На экране есть две кнопки, скажем, кнопка1 и кнопка2. При загрузке страницы кнопка2 отключена. Когда пользователь нажимает кнопку 1, кнопка 2 будет включена. Я достиг этой функциональности, используя событие javascript window.onload и событие onclick на кнопке1. Моя проблема в том, что когда пользователь нажимает кнопку 1, он запускает перезагрузку страницы. При этом после перезагрузки страницы кнопка2 отключается из-за события onload.

Есть ли другой способ достичь этой функциональности?

Кстати, я использую Primefaces.


person Adan    schedule 31.01.2012    source источник
comment
Похоже, вы могли бы использовать ответ здесь .com/questions/9000669/   -  person mrembisz    schedule 31.01.2012


Ответы (3)


главная страница выглядит так,

 <p:commandButton update="panel1"  actionListener="#{bean.button1}" value="button1" disabled="#{bean.disable}"> 
     <f:setPropertyActionListener value="#{false}" target="#{bean.disable}"/>   
 </p:commandButton> 


 <p:commandButton update="panel2"  actionListener="#{bean.button2}" value="button1" disabled="#{!(bean.disable)}"> 
     <f:setPropertyActionListener value="#{true}" target="#{bean.disable}"/>    
 </p:commandButton> 

Управление бином:

 public class Bean {

    private boolean disable;

    // default constructor 
    public Bean(){
       this.disable= false;
    }

    public boolean isDisable() {
       return disable;
    }
    public void setDisable(boolean disable) {
       this.disable = disable;
    }
}
person Kushan    schedule 01.02.2012
comment
Почему ты звонишь actionListener? - person alexander; 16.08.2015
comment
@Kushan: Не могли бы вы объяснить, почему вы используете actionListener? - person alexander; 25.08.2015
comment
disabled=#{bean.disable} достаточно. Вы можете использовать только это, НО также сконцентрируйтесь на (логической) логике isDisable! - person CodeSlave; 28.02.2020

На мой взгляд, есть намного более простой способ.

Просто создайте свойство boolean (с геттером + сеттером) в managed bean с аннотациями javax.faces.bean.ViewScoped и javax.faces.bean.ManagedBean.

Вы можете управлять отключенным состоянием через это свойство (button2State).

<h:form>
    <p:commandButton id="button1" update="button2"
        action="#{bean.setButton2State(false)}"
        value="Enable second button" />
    <p:commandButton id="button2" disabled="#{bean.button2State}"
        value="button disabled one page load" />
</h:form>

Первая кнопка вызывает setter свойства и устанавливает button2State в false, чтобы активировать кнопку. Также в этом примере ajax используется только для обновления кнопки.

person alexander    schedule 16.08.2015

Если вы используете JSF 2.0, вы можете сделать это с помощью тега f:ajax.

Вы можете отключить кнопку с условием в bean-компоненте

disabled="#{bean.isDisabled}"

когда вы перерисовываете кнопку, когда вы нажимаете кнопку 1, кнопка может быть включена.

person cremersstijn    schedule 31.01.2012