h: commandButton no puede someterse a parámetros bean de respaldo
-
02-10-2019 - |
Pregunta
Me gustaría presentar un valor llave de mi bean de respaldo para que yo sepa qué persona dentro de una colección de usuario tratando de actualización. Creo que necesito f usada: param para hacerlo, pero por alguna razón no funciona. Se presentará el valor bien si uso af: commandButton en lugar de h:. CommandButton
Esta es mi botón:
<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>
y aquí es cómo estoy tratando de conseguir mis valores enviados a cabo.
FacesContext context = FacesContext.getCurrentInstance();
Map map = context.getExternalContext().getRequestParameterMap();
String edi_tmp = (String)map.get("selectedEDI");
Pero tengo la excepción ArrayIndexOutOfBound, por favor ayuda, gracias.
Solución
Si el botón está dentro de un <h:dataTable>
o cualquier otro UIData
componente, entonces debería estar recuperando la "corriente" objeto de fila por UIData#getRowData()
o DataModel#getRowData()
. No hay necesidad de pasar el identificador de fila alrededor como parámetro o así.
por ejemplo.
@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.
}
con
<h:form>
<h:dataTable value="#{bean.personModel}" var="person">
<h:column>
<h:commandButton value="update" action="#{bean.update}" />
</h:column>
</h:dataTable>
</h:form>
Debe ser sencillo.