Richface Problema : <a4j: ActionParam>??
Hola, estoy aprendiendo RichFace, con ayuda del libro "Practical RichFace " y tengo un contratiempo.
Resulta que en este ejemplo, al apretar sobre uno de los enlaces aumenta el valor del campo (unico en la fila) y al apretar el otro lo disminuye(en 1).
[0 ][+ / - ]
[0 ][+ / - ]
[0 ][+ / - ]
[0 ][+ / - ]
Pero , ambas etiqueta action param,aparentemente no estan enviando el valor, y me aparece un nullpointerexcepcion cada vez trato de hacer un cambio en la tabla.
E ingresado un valor directamente sobre el bean, y me funciona correctamente, lo que me lleva a pensar que en los action param algo esta errado o talvez el rowkeyvar.
Este es el código, espero puedan ayudarme.
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.annotation.PostConstruct;
import javax.faces.event.ActionEvent;
public class RepeatBean {
private List numbers;
private Set rowsToUpdate;
private Integer updatedRow;
public RepeatBean() {
}
public void increase (ActionEvent event){
rowsToUpdate.clear();
// increase selected number
numbers.get(updatedRow).increase();
//numbers.get(updatedRow).increase();
// insert row to be updated
rowsToUpdate.add(updatedRow);
}
public void decrease (ActionEvent event){
rowsToUpdate.clear();
// decrease selected number
numbers.get(updatedRow).decrease();
// insert row to be updated
rowsToUpdate.add(updatedRow); }
// init method
@PostConstruct
public void init () {
// list of numbers
numbers = new ArrayList ();
// Set to hold rows to be updated
rowsToUpdate = new HashSet ();
numbers.add(new MagicNumber());
numbers.add(new MagicNumber());
numbers.add(new MagicNumber());
numbers.add(new MagicNumber());
numbers.add(new MagicNumber());
}
public Set getRowsToUpdate() {
return rowsToUpdate;
}
public void setUpdatedRow(Integer updatedRow) {
this.updatedRow = updatedRow;
}
public Integer getUpdatedRow() {
return updatedRow;
}
public void setNumbers(List numbers) {
this.numbers = numbers;
}
public List getNumbers() {
return numbers;
}
}
public class MagicNumber {
private Integer number;
public void increase (){
setNumber(getNumber() + 1);
}
public void decrease () {
setNumber(getNumber() - 1);
}
public MagicNumber (){
number = 0;
}
public void setNumber(Integer number) {
this.number = number;
}
public Integer getNumber() {
return number;
}
}
- Inicie sesión o regístrese para enviar comentarios
ActionListener y ActionParam
¿Qué versión de Richfaces tienes?
Recuerdo que hasta cierta versión de Richfaces (me parece que 3.2.x, no estoy seguro) la instrucción de a4j:actionParam era llamada antes que el atributo actionListener de tu a4j:commandLink (o Button), pero a partir de 3.3.0 actionListener se ejecutaba primero (para ser coherente con la especificación de JSF 1.2). Este detalle puede ser el detonador de tu NPE, ya que estarías accediendo desde
la propiedad updatedRow que aún no es asignada.
Posibles soluciones:
Ya nos cuentas.
*Edit: Por cierto, es "Richfaces", no "Richface". ;-)
Saludos.
Me asombra el nivel de
Me asombra el nivel de seguimiento que hay que hacerle a las versiones, este detalle no me lo esperaba, a funcionado muy bien la primera opción.
Precisamente en este libro trabajan con la versión 3.2.x, te agradezco el apoyo.
Si tienes algunos tips para aprender mejor este Framework estaré atento.