JSF не вызывает методы получения во всплывающем окне

У меня есть обычная таблица данных, содержащая кнопки редактирования, которая открывает всплывающее окно.

 <h:form id="creditcard_configuration_form">
  <rich:dataTable id="test" width="100%"
    value="#{creditcardConfigurationService.cardsList}"
    iterationStatusVar="it" var="card">
    <rich:column>
      <a4j:commandLink execute="@this" ajaxSingle="true"
        oncomplete="#{rich:component('test123')}.show()">
        <h:graphicImage value="../../resources/images/edit.gif"
          alt="edit" />
        <a4j:param value="#{it.index}"
          assignTo="#{creditcardConfigurationAction.currentIndex}" />
      </a4j:commandLink>
    </rich:column>
  </rich:dataTable>

  <rich:popupPanel id="test123"
    header="#{creditcardConfigurationAction.currentIndex}"
    onmaskclick="#{rich:component('test123')}.hide()">
        asdf
  </rich:popupPanel>
</h:form>

Перед открытием всплывающего окна я установил индексную переменную в своем компоненте. Однако JSF не вызывает метод getter для получения index из a4j:param при открытии всплывающего окна (по крайней мере, больше нет). Я обнаружил, что геттер-метод вызывается при рендеринге страницы, но никогда после этого. (означает, что для всплывающего окна индекс всегда равен 0).

Компонент, содержащий index var, находится в области просмотра, а сервисный компонент — в области сеанса. Я использую новейшую версию RichFaces (4.3.2 Final) и JSF 2.0.6.


person user1502353    schedule 26.06.2013    source источник
comment
было бы неплохо, но это ничего не меняет.   -  person user1502353    schedule 26.06.2013
comment
ой! index var означает #{it.index}, который находится в теге param, я прав? Я предсказываю, что вы говорите о каком-то элементе, который вы поместили в popuppanel.   -  person Jubin Patel    schedule 26.06.2013
comment
Да, значение index var равно #{it.index} и называется currentIndex в bean-компоненте, как вы можете видеть здесь. У меня есть несколько элементов ввода и кнопок в popupPanel, но это не имеет большого значения, так как он даже не работает, если popupPanel пуст, как в примере, который я разместил выше.   -  person user1502353    schedule 26.06.2013
comment
поэтому в этом случае вы можете использовать action или actionlistner в commandLink и получить от него значение индекса.   -  person Jubin Patel    schedule 26.06.2013


Ответы (1)


ваш вопрос немного сбивает с толку, поэтому я доказываю оба решения, которые я предсказываю как решение вашей проблемы,

Ответ 1:
сначала обратитесь к этому ссылка на витрину Richfaces с демонстрацией
здесь ее код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:a4j="http://richfaces.org/a4j"
    xmlns:rich="http://richfaces.org/rich">
    <h:form>
        <rich:panel>
            <h:panelGrid columns="2">
                <a4j:commandButton value="Set Name to Alex" render="rep">
                    <a4j:param value="Alex" assignTo="#{userBean.name}" />
                </a4j:commandButton>

                <a4j:commandButton value="Set Name to John" render="rep">
                    <a4j:param value="John" assignTo="#{userBean.name}" />
                </a4j:commandButton>
            </h:panelGrid>
        </rich:panel>
        <br />
        <rich:panel>
            <h:outputText id="rep" value="Selected Name:#{userBean.name}" />
        </rich:panel>
    </h:form>
</ui:composition>

как вы можете видеть, вам нужно render любой компонент (здесь используйте rep), где вызывается установщик геттера переменной name (на странице значение параметра отправки, установленное в области запроса, не вызывает геттер-сеттер, он вызывает только геттер во время загрузки страницы).

2:
сначала проверьте, что ваши данные не совпадают с 0 для всех данных Param из БД, которые вы можете проверить, поставив один outputtext после button со значением #{it.index}, как вы используете в param.
также еще один прогноз, измените commandLink на commandButton, как показано в примере, и попробуйте еще раз, может сработать.

person Jubin Patel    schedule 26.06.2013
comment
Ха-ха, так глупо. Спасибо за решение проблемы (первое решение помогло) :) - person user1502353; 26.06.2013