JSF2.1 - Использование AJAX в selectoneradio - PullRequest
2 голосов
/ 22 марта 2012

Я пытаюсь сделать ajax-запросы в моем проекте, но у меня ничего не получается.

Я создал страницу xhtml с selectoneradio , которую я хочу использовать AJAX для рендеринга панели .

<h:selectOneRadio id="tcliente" value="#{clienteMB.tipoCliente}">
  <f:ajax execute="@form" render="sessaoDados" listener=#{cadastroClienteRendererMB.testar}" />
  <f:selectItems value="#{clienteMB.itemValuesTipoCliente}" />
</h:selectOneRadio>

Мои управляемые бобы:

@ManagedBean<br>
@ViewScoped<br>
public class CadastroClienteRendererMB implements Serializable {<br>
...
public void testar() {

    System.out.println("teste");

    if (panel == null)
        panel = new HtmlPanelGrid();

    HtmlOutputText text = new HtmlOutputText();

    text.setValue("teste");

    panel.getChildren().add(text);

  }
}

Я гуглил по этому вопросу, но все ответы, которые я получаю, не решают эту проблему. И последний вопрос, с которым я обратился, таков: valueChangeListener не вызывается из , который находится в стороне a

Пожалуйста, извините, вы впервые пользуетесь этим форумом, и мне нужна помощь или ориентация по этому поводу.

Спасибо и всего наилучшего

1 Ответ

3 голосов
/ 22 марта 2012

Строго отвечая на ваш вопрос, вам не нужно создавать экземпляр UIComponent в вашем контроллере, как вы это делали в своем коде, чтобы заставить работать ajax.

Вызов f:ajax вызовет установщик для свойства вашего контроллера при указанном вами событии.Если вы не укажете какое-либо событие, будет вызвано событие по умолчанию для этого вида UIComponent.Для h:selectOneRadio это valueChange событие.

В любом случае вам необходимо указать правильное значение элемента для f:selectItems.Если свойство, которое вы устанавливаете, является строкой, значение элемента должно быть строкой.Если свойство является пользовательским типом, который вы определили, вы должны создать конвертер для соответствующего преобразования значения.

В этом тесте значение, которое мы устанавливаем, является строкой, поэтому нам не нужноконвертер для него.

Я создал для вас небольшое тестовое приложение:

Контроллер



    @ManagedBean
    @ViewScoped
    public class TestController implements Serializable
    {
        private static final long serialVersionUID = 1L;

        private String teste;

        public String getTeste()
        {
            return teste;
        }

        public void setTeste(String teste)
        {
            this.teste = teste;
        }
    }


Страница

<h:form>

    <h:panelGrid id="meuGrid" columns="2">

        <h:outputText value="Servidor" />
        <h:selectOneRadio id="teste" value="#{testController.teste}">
            <f:selectItem itemLabel="JBoss AS7" itemValue="AS7" />
            <f:selectItem itemLabel="GlassFish" itemValue="GF3" />
            <f:ajax execute="@this" render="resultado" />
        </h:selectOneRadio>

        <h:outputText value="Selecionado" />
        <h:outputText id="resultado" value="#{testController.teste}" />

    </h:panelGrid>

</h:form>

Вот и все.

...