выберите OneRadio с действием сразу после нажатия - PullRequest
2 голосов
/ 26 января 2009

Это должно быть легко для профессионала:

Я использую JSF / Facelets / Seam и пытаюсь отобразить радиокнопки. Затем, после того, как пользователь нажал на одну из кнопок, значение должно быть сохранено, и пользователь сразу же будет перенаправлен на другую страницу (т.е. без необходимости нажатия на кнопку отправки).

Переключатель работает, но не переадресация.

Спасибо

Ответы [ 2 ]

5 голосов
/ 27 января 2009

Вы действительно можете использовать Richfaces для добавления a4j: вспомогательный компонент :

<h:selectOneRadio value="#{myBean.myValue}" ...>
    ...
    <a4j:support event="onclick" action="#{myBean.doSomething}"/>
</h:selectOneRadio>

В вашем коде Java:

public String doSomething() {
    // Your code goes here...
    ...
    // Now, we move to the new page.
    return "some-outcome";
}

Однако, если вы не можете (или не хотите) добавить новую библиотеку, вы можете сделать это по-старому:

<h:selectOneRadio value="#{myBean.myValue}" ... onclick="this.form.submit();" valueChangeListener="#{myBean.doSomething}">
    ...
</h:selectOneRadio>

Этот код отправит форму, в которой находится переключатель, когда будет обнаружено событие Javascript onclick. На стороне сервера будет выполнено действие doSomething. В этом методе вы можете создать правило навигации, которое будет выполняться:

public void doSomething(ValueChangeEvent evt) {
    // Your code goes here...
    ...
    // Now, we move to another page...
    FacesContext context = FacesContext.getCurrentInstance();
    NavigationHandler navigation = context.getApplication().getNavigationHandler();
    navigation.handleNavigation(context, "", "some-outcome");
}

где some-output - это результат, определенный в правиле навигации в вашем файле names-config.xml.

1 голос
/ 11 мая 2012

С JSF 2.0 вы можете сделать следующее

<h:selectOneRadio ...
...
    <f:ajax event="change" render="@form" />
</h:selectOneRadio>
...