#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
на acommandButton
вызывает некоторые сюрпризы. 3. Так вы говорите, чтоcodeAddress
это вызоветconsultaValor
? Вы уверены, что ActionListener и новая фаза рендеринга видят один и тот же компонент (укажите точку останова конструктора компонента, чтобы узнать)?2. Разве вы не забыли
update="... print"
наp:remoteCommand
?3. Согласен с приведенными выше комментариями. Кроме того, я думаю, вам нужно либо использовать «отключено» вместо «отображено» на кнопке, либо обернуть кнопку, т.е. outputPanel, и вместо этого обновить этот компонент. Проблема в том, что вы не можете обновить компонент с помощью ajax, которого нет в componenttree.
Ответ №1:
Ваш вспомогательный компонент в принципе в порядке, вам просто нужно изменить свою интерфейсную страницу.
Как и сказали @mabi, @rion18 и @Jaqen H’ghar, вам следует:
- Удалить
booleanValue()
- Вызов
remoteCommand
с помощью aonclick
из acommandButton
. - Добавьте
update="print"
наp:remoteCommand
. - Используйте
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>
Пожалуйста, обратите внимание, что
- Я что-то удалил в вашем коде, потому что я не знал, что они означают в вашем коде (например
bandeira1,bandeira2,bandeira1Value,bandeira2Value,origemInfo,addressInfo...
), вы должны добавить их обратно, если используете код, который я публикую здесь. - Я добавил
p:commandButton
, чтобыp:remoteCommand
вызывался. Убедитесь, что вызывается remoteCommand, если вы хотите удалить добавленную мной кнопку.