我写了一个<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>
答案 0 :(得分:3)
您可以使用Method表达式(For JSF 2.0)或<f:param>
,<f:attribute>
或f:setPropertyActionListener
将参数从JSF页面传递到backing beans的action方法。
您可以参考http://www.mkyong.com/jsf2/4-ways-to-pass-parameter-from-jsf-page-to-backing-bean/作为参考。
答案 1 :(得分:0)
尝试这样的事情:
<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();
}
}
}
}