Как передать выбранное значение в качестве параметра для передачи в a4j: support - PullRequest
2 голосов
/ 08 февраля 2011

У меня есть один <h:selectOneMenu>, внутри которого написано <a4j:support>. Я должен передать текущее выбранное значение через <a4j:support> в качестве параметра к действию. Как я могу это сделать?

<rich:modalPanel>

 <a4j:form>
 <rich:dataTable value="#{factoryCollectionOfUsers}" var="foo">
 <h:selectOneMenu name="role">
                        <s:selectItems
                           value="#{userAction.roleArray}"
                           var="role" label="#{role}"
                           noSelectionLabel="Please select" />
                        <a4j:support event="onchange" ajaxSingle="true"
                           action="#{userAction.setSelection}">
                        </a4j:support>
                        <s:convertEnum />

              </h:selectOneMenu>
  </rich:dataTable>
</a4j:form>
</rich:modalPanel>

Ответы [ 2 ]

3 голосов
/ 10 февраля 2011

Вы можете передать параметры со страницы JSF в метод действия вспомогательных компонентов, используя выражение метода (для JSF 2.0), или <f:param>, или <f:attribute>, или f:setPropertyActionListener.

Вы можете обратиться к http://www.mkyong.com/jsf2/4-ways-to-pass-parameter-from-jsf-page-to-backing-bean/ для справки.

0 голосов
/ 10 февраля 2011

Попробуйте что-то вроде этого:

<h:form> 
  <h:selectOneMenu value="#{foo.theChosenValue}"
    required="true" valueChangeListener="#{foo.processValueChange}"
    onchange="this.form.submit();">
        <s:selectItems
                       value="#{userAction.roleArray}"
                       var="role" label="#{role}"
                       noSelectionLabel="Please select" />
     <s:convertEnum />
  </h:selectOneMenu>
</h:form>

Ваш компонент должен затем:

@Name("foo")
public class Foo {
    @Getter @Setter Enum theChosenValue; //I don't know your type

    public void processValueChange(ValueChangeEvent value) throws AbortProcessingException {
        if (value != null) {
            if (value.getNewValue() instanceof Enum) {
                this.theChosenValue = (Enum) value.getNewValue();
            }
        }
    }
}
...