Как показать компонент по контроллеру? - PullRequest
1 голос
/ 25 сентября 2011

Мне нужно зарегистрировать пользователя, и после этого я хотел бы вызвать <rich:popupPanel>, например, чтобы показать сообщение об ошибке или успешное сообщение со значком.

<rich:popupPanel id="popup" modal="false" autosized="true" resizeable="false">
    <f:facet name="header">
        <h:outputText value="Simple popup panel" />
    </f:facet>
    <f:facet name="controls">
        <h:outputLink value="#"
            onclick="#{rich:component('popup')}.hide(); return false;">
                X
            </h:outputLink>
    </f:facet>
    <p>Any content might be inside this panel.</p>
</rich:popupPanel>

Как мне это сделать после проверки процесса регистрации в моем контроллере? Я мог бы назвать <h:message>, но я думаю, что popupPanel с некоторым значком и сообщением о состоянии будет более подходящим для пользователя.

1 Ответ

1 голос
/ 25 сентября 2011

Как правило, вы просто устанавливаете некоторое (логическое) переключение или конкретное свойство объекта в методе действия bean-компонента, который затем используется в атрибуте rendered рассматриваемого содержащего компонента. Вот пример с простым логическим значением:

private boolean success;

public void submit() {
    // ...

    success = true;
}

public boolean isSuccess() {
    return success;
}

с

<rich:popupPanel rendered="#{bean.success}">
     ...
</rich:popupPanel>

Вы также можете установить некоторое свойство объекта и затем проверить, не является ли оно пустым или нулевым. Например. когда User успешно сохранен после регистрации и, таким образом, получил идентификатор из БД:

<rich:popupPanel rendered="#{not empty bean.user.id}">
     ...
</rich:popupPanel>

Примечание: в конкретном случае вашего <rich:popupPanel> вы также можете использовать атрибут show вместо атрибута rendered.

<rich:popupPanel show="#{bean.success}">
     ...
</rich:popupPanel>

Единственное отличие состоит в том, что когда show равен false, компонент по-прежнему отображается, но затем с помощью CSS display:none;, так что он визуально скрыт в дереве HTML DOM, так что вы можете снова отобразить его, просто JavaScript.

Смотри также:

...