командная кнопка не выполняет действие, если к управляемому бину привязаны другие атрибуты - PullRequest
0 голосов
/ 31 августа 2011

Я действительно новичок в JSF.Мне нужно включать, отключать, отображать или не отображать некоторые кнопки на странице в зависимости от привилегий зарегистрированного пользователя.Страница привязана к управляемому bean-объекту, находящемуся в области запроса, я связываю визуализированный или отключенный атрибут командной кнопки с «видимым» свойством управляемого bean-компонента, а actionlistener - к способу управляемого бина, единственная цель которого - перейти на другую страницу.Если я связываю одно из вышеуказанных свойств со свойством visibile, метод навигации не вызывается, и та же страница перерисовывается с отключенной или не отрисованной кнопкой.Более неотложный вопрос - это ответ «как отключить или скрыть кнопку?»конечно, но, поскольку я предполагаю, что проблема связана с жизненным циклом страницы jsf и областью действия bean-компонента, я хотел бы также обратиться к некоторому учебнику, немного более продвинутому, чем мир hello, который можно найти вокруг.

ниже являются частью кода.Заранее благодарим за любую помощь

на странице xhtml

    <ui:define name="content">      
    <p:layoutUnit position="center" header="Dettaglio Pratica" scrollable="true">
        <h:form id="formDettaglioPratica">
        <!-- i've used javascript to redirect -->
        <p:commandButton styleClass="commandButton" value="Modifica pratica" ajax="false"
             rendered="#{praticaCtrl.visible}" onclick="navigateToChange();return false;"/>
        <p:commandButton id="backButton" styleClass="commandButton" value="Torna alla lista" 
        onclick="navigateToHome();return false;"></p:commandButton>
        <!-- never redirect to page defined in method checkIn -->
         <p:commandButton id="checkinButton" styleClass="commandButton" value="Rilascia pratica" ajax="false" 
           actionListener="#{praticaCtrl.checkIn}" disabled="#{praticaCtrl.visible}"></p:commandButton>

            <!-- printing output values -->

        <h:inputHidden id="idPratica" value="#{praticaCtrl.idPratica}"></h:inputHidden>
        <h:inputHidden id="idBox" value="#{praticaCtrl.box}"></h:inputHidden>
        </h:form>
    </p:layoutUnit>
</ui:define>

соответствующей части управляемого компонента

    public boolean isVisible() {
    return isVisible;
}

public void setVisible(boolean isVisible) {
    this.isVisible = isVisible;
}

public void setUser(IUserProvider user) {
    try{
    if(pratica.getUtenteCheckOut() == null
    || (pratica.getUtenteCheckOut().getMatricola().equalsIgnoreCase(user.getUser().getMatricola()))     
    )
        setVisible(true);   
    else
        setVisible(false);

    this.user = user;
    }
    catch(Exception ex)
    {log.error(ex);}
}

public void checkIn(ActionEvent event)
{
    try{
    log.info(String.format("modifica della pratica %s", idPratica));
    ajaxRedirect(String.format("../Box/ListaRichieste.xhtml?box=%s",box));
    }
    catch(Exception ex)
    {
        log.error(ex.getMessage(),ex);
    }
}

это метод ajaxRedirect, мы неt использовать правила навигации, ни один из методов не возвращает строку

protected void ajaxRedirect(String url) throws IOException {
    FacesContext.getCurrentInstance().getExternalContext()
    .redirect(url);     
}

1 Ответ

0 голосов
/ 28 сентября 2011

ответ для описанного поведения можно найти по адресу: http://forum.primefaces.org/viewtopic.php?f=3&t=13269&p=39996, который ссылается на ответ BalusC на аналогичный вопрос по stackoverflow: commandButton / commandLink / ajax action / listener метод не вызывается или вводится значение не обновляется

...