h: commandLink не работает, когда внутри списка - PullRequest
2 голосов
/ 27 июля 2011

У меня проблема с RichFaces и созданием списков ссылок.Если вы попытаетесь использовать любой тип commandLink внутри списка (я пробовал ui: repeat и rich: list), действие по этой ссылке не вызывается.Я также попробовал commandButton и варианты a4j тех.Я использую JSF 2, RichFaces 4 на Jboss 6.

<rich:list var="venue" value="#{searchManager.results}" type="definitions" stateVar="status">
  <h:form>
    <h:commandLink value="CLICK IT" immediate="true" action="#{score.selectVenue}" />
  </h:form>
</rich:list>

Положение формы также не имеет значения.

<h:form>
   <rich:list var="venue" value="#{searchManager.results}" type="definitions" stateVar="status">
       <h:commandLink value="CLICK IT" immediate="true" action="#{score.selectVenue}" />
   </rich:list>
</h:form>

Если у меня есть ссылка сама по себе(нет списка) это работает.

Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 27 июля 2011

Когда вы щелкаете командную ссылку или нажимаете командную кнопку, чтобы отправить форму, JSF во время фазы применения значений запроса сканирует дерево компонентов для рассматриваемой командной ссылки / кнопки, чтобы он мог найти выражение действия, связанное с ним. , который в вашем случае #{score.selectVenue}.

Однако, чтобы когда-либо достичь этого, вам нужно убедиться, что #{searchManager.results} возвращает точно такой же список, как и при отображении формы. Поскольку с пустым списком результатов во время фазы применения значений запроса формы отправки не будет вообще никакой ссылки / кнопки команды в представлении.

Ваш боб #{searchManager}, кажется, находится в области запроса. Бины с областью запроса имеют время жизни ровно одного цикла запрос-ответ. Таким образом, когда вы отправляете форму, вы получаете совершенно новый и другой экземпляр компонента, находящегося в области запроса, чем он был при отображении формы. Свойство results, по-видимому, не сохраняется во время (после) построения bean-компонента и поэтому остается пустым. Поэтому JSF не может найти соответствующую командную ссылку / кнопку и, следовательно, не может найти выражение действия, связанное с ним, и, следовательно, не может вызвать его.

Поскольку вы используете JSF2, легко исправить это, поместив компонент в область просмотра. Таким образом, бин будет существовать до тех пор, пока вы отправляете и переходите к одному и тому же представлению, возвращая null или void в методах действия.

@ManagedBean
@ViewScoped
public class SearchManager {
    // ...
}

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

...