Включить / отключить основные области командной кнопки

#jsf #primefaces

#jsf #основные интерфейсы

Вопрос:

На моей странице есть кнопка поиска, позволяющая оценить введенный адрес. После исследования я хочу, чтобы меня удерживали, чтобы включить кнопку печати.

                 <p:commandButton value="#{msg['btn-search']}"
                    styleClass="btn btn-primary" onclick="codeAddress()" />
                <p:remoteCommand actionListener="#{searchBean.addMarker()}"
                    name="consultaValor"
                    update="bandeira1, bandeira2,bandeira1Value, bandeira2Value,origemInfo,addressInfo"/>
                <p:commandButton id="print" value="Imprimir" styleClass="btn btn-primary" rendered="#{searchBean.print.booleanValue()}" >
                    <p:printer target="information" />
                </p:commandButton>
  

Я пытался использовать отображаемый атрибут, который получает логическое значение моего searchBean, но не сработал, может кто-нибудь мне помочь?

 private Boolean print = false;

public Boolean getPrint() {
    return print;
}

public void setPrint(Boolean print) {
    this.print = print;
}
public void addMarker() {
    Marker marker = new Marker(new LatLng(lat, lng),address);
    emptyModel.addOverlay(marker);           
    result = true;
    String wktFilter = "POINT(" getLng() " " getLat() ")";

    findByWKT(wktFilter);

    print = true;

}
  

Метод addMarker вызывается кнопкой поиска, затем он становится верным для логической печати, но не работает.

Комментарии:

1. 1. вам не нужно booleanValue() , 2. onclick на a commandButton вызывает некоторые сюрпризы. 3. Так вы говорите, что codeAddress это вызовет consultaValor ? Вы уверены, что ActionListener и новая фаза рендеринга видят один и тот же компонент (укажите точку останова конструктора компонента, чтобы узнать)?

2. Разве вы не забыли update="... print" на p:remoteCommand ?

3. Согласен с приведенными выше комментариями. Кроме того, я думаю, вам нужно либо использовать «отключено» вместо «отображено» на кнопке, либо обернуть кнопку, т.е. outputPanel, и вместо этого обновить этот компонент. Проблема в том, что вы не можете обновить компонент с помощью ajax, которого нет в componenttree.

Ответ №1:

Ваш вспомогательный компонент в принципе в порядке, вам просто нужно изменить свою интерфейсную страницу.

Как и сказали @mabi, @rion18 и @Jaqen H’ghar, вам следует:

  1. Удалить booleanValue()
  2. Вызов remoteCommand с помощью a onclick из a commandButton .
  3. Добавьте update="print" на p:remoteCommand .
  4. Используйте disabled вместо rendered . (который я использую display здесь.)

Таким образом, ваш интерфейс будет выглядеть так:

 <p:commandButton value="btn-search" styleClass="btn btn-primary" />
<p:commandButton value="remote" onclick="consultaValor()"/>
<p:remoteCommand actionListener="#{searchBean.addMarker()}"
                         name="consultaValor" 
                         update="print"/>
<p:commandButton id="print" value="Imprimir" styleClass="btn btn-primary" style="display:#{searchBean.print?'inline':'none'}" >

</p:commandButton>
  

Пожалуйста, обратите внимание, что

  1. Я что-то удалил в вашем коде, потому что я не знал, что они означают в вашем коде (например bandeira1,bandeira2,bandeira1Value,bandeira2Value,origemInfo,addressInfo... ), вы должны добавить их обратно, если используете код, который я публикую здесь.
  2. Я добавил p:commandButton , чтобы p:remoteCommand вызывался. Убедитесь, что вызывается remoteCommand, если вы хотите удалить добавленную мной кнопку.