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.

¿Fue útil?

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.

Ver también:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top