selectOneRadio с действием сразу после клика

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

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

Радиокнопка работает, но не переадресация.

Спасибо


person Community    schedule 26.01.2009    source источник


Ответы (2)


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

<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");
}

где некоторый результат — это результат, определенный в правиле навигации в файлеfaces-config.xml.

person Romain Linsolas    schedule 27.01.2009

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

<h:selectOneRadio ...
...
    <f:ajax event="change" render="@form" />
</h:selectOneRadio>
person Oscar Castiblanco    schedule 11.05.2012