我想向我的支持bean提交一个键值,以便我知道集合用户中哪个人试图更新。我想我需要使用f:param这样做,但不知何故它不起作用。如果我使用af:commandButton而不是h:commandButton。
,它将提交该值这是我的按钮:
<h:commandButton styleClass="cntctmBtn" value="Update" action="#{pullForm.updateDependent}">
<f:param name="selectedIndex" value="#{loop.index}" />
<f:param name="selectedEDI" value="#{eachOne.identifier.dodEdiPnId}" />
</h:commandButton>
以下是我试图获取提交的值的方式。
FacesContext context = FacesContext.getCurrentInstance();
Map map = context.getExternalContext().getRequestParameterMap();
String edi_tmp = (String)map.get("selectedEDI");
但是我得到了ArrayIndexOutOfBound异常,请帮助,谢谢。
答案 0 :(得分:3)
如果该按钮位于<h:dataTable>
或任何其他UIData
组件内,那么您应该按UIData#getRowData()
或DataModel#getRowData()
检索“当前”行对象。无需将行标识符作为参数左右传递。
E.g。
@ManagedBean
@ViewScoped
public class Bean {
private List<Person> persons;
private DataModel<Person> personModel;
public Bean() {
persons = loadItSomehow();
personModel = new ListDataModel<Person>(persons);
}
public void update() {
Person selectedPerson = personModel.getRowData(); // There it is.
// ...
}
// Add/generate getters/setters/etc.
}
与
<h:form>
<h:dataTable value="#{bean.personModel}" var="person">
<h:column>
<h:commandButton value="update" action="#{bean.update}" />
</h:column>
</h:dataTable>
</h:form>
保持简单。