2013-04-24 3 views
2

Я пытаюсь отключить компонент jsf только путем определения метода действия и привязки его к атрибуту «disabled» компонентов.disabled = "# {not recordsTransferSearch.isDisabled}" не вызывает метод isDisabled()

Мой JSF компонент фрагмент

<h:form id="bulk_sch_form1"> 
    <a4j:commandButton id="alls" value="a. Search records form this company" 
     action="#{recordsTransferSearch.actionSearch}" 
     reRender="srtDlGrd, dlod_msg_grd, pending_student_table" 

     disabled="#{not recordsTransferSearch.isDisabled}"> 

    </a4j:commandButton> 
</h:form> 

Архивация метод компонента Действие

public boolean isDisabled() { 
    if (searchResults != null) { 
     return true; 
    } 
    return false; 
} 

The SearchResults только после того, как оценивающих результат успешного поиска был возвращен. Но, как указано в названии, он вообще не вызывает метод действия isDisabled(), поэтому ничего не происходит.

Метод действия вызывается только при обновлении страницы.

Спасибо.

+0

Если вы хотите обновление

+0

@RongNK, который напрямую не связан с моей проблемой. – Switch

+0

ответ

4

Вы должны либо использовать disabled в качестве полевого добытчика, как в disabled="#{not recordsTransferSearch.disabled}", или если ваш EL поддерживает вызовы методов, т.е. версии 2.2+, вы должны добавить пустые круглые скобки, (), в конце вызова метода, как в disabled="#{not recordsTransferSearch.isDisabled()}".

Обратите внимание, что в его нынешнем виде, и в отличие от того, что вы предлагаете в комментариях, disabled="#{bean.isDisabled}" будет вызывать Недвижимость 'isDisabled' не найден Ошибка.


В соответствии с вашими комментариями вы не в полной мере понять, как disabled атрибут работает в JSF. Кажется, вы ожидаете, что кнопка будет включена/отключена на каком-то событии javascript и/или с помощью некоторых изменений, сделанных некоторыми методами action/actionlistener. Это не тот случай. Кнопка отключена/включена только тогда, когда EL выражение атрибута disabled соответствует true/false соответственно. Вы даже можете проверить его: когда вы удаляете отключенный атрибут HTML input, эффективно активизируя его на стороне клиента и вызывая эту кнопку, вы увидите, что не будет вызываться метод действия, но вместо этого его отключенный атрибут будет переоценен на сервере и, поскольку он будет оцениваться до false, никакого метода не будет вызываться.

Чтобы заставить его работать, как ожидалось, вам необходимо засавить кнопку команды с помощью AJAX вызова (указав его идентификатор в reRender атрибута другого <a4j:commandButton>, что изменяет результат isDisabled() метода так, что он будет возвращать false), или синхронно (для обеспечения необходимой оценки disabled), чтобы состояние отключения было оценено до false.

Также было бы полезно ознакомиться с основным примером, чтобы понять, как все это работает.

Вид:

<h:form> 
    <h:commandButton id="disabled" value="Disabled command button" 
        action="#{bean.disabledSubmit}" 
        disabled="#{not bean.disabled}"> 
    </h:commandButton> 
    <h:commandButton id="simple" value="Enable a disabled button" 
        action="#{bean.simpleSubmit}"> 
     <f:ajax render="disabled"/> 
    </h:commandButton> 
</h:form> 

боб:

@ManagedBean 
@ViewScoped 
public class Bean implements Serializable{ 

    private boolean searchResults = false; 

    public boolean isDisabled() { 
     return searchResults; 
    } 

    public String disabledSubmit() { 
     return null; 
    } 

    public String simpleSubmit() { 
     searchResults = true; 
     return null; 
    } 

} 
+0

Пробовал те, но это не сработало. метод действия вообще не звонит. – Switch

+0

Как вы обрабатываете включение/выключение? Вы знаете, что с JSF вам нужно вызвать это изменение с сервера, верно? – skuntsel

+0

Я не знаком с запуском, но, как я уже упоминал в своем вопросе, у меня есть поддерживающий компонент для включения или отключения. – Switch