Primefaces Datatable ne marche pas de mise à jour des lignes sélectionnées

J'ai un problème simple. J'ai un Primefaces Datatable. Lorsque l'utilisateur clique sur une ligne, je voudrais les lignes sélectionnées à la propriété dans la sauvegarde de la fève à être mis à jour. Ceci peut être réalisé si la forme de la Datatable est en est remis, mais je voudrais que cela se produise de manière asynchrone. J'ai lu les différentes questions ici sur cette question, mais n'ont toujours pas été en mesure de trouver une solution.

Voici un petit exemple pour illustrer le problème :

Test JSF Page:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui">
<h:head>
    <title>Facelet Title</title>
</h:head>
<h:body>
    <p:dataTable var="v" value="#{test.values}" selectionMode="multiple"
                 selection="#{test.selectedValue}" rowKey="#{v.value}" >
        <p:column headerText="Test">
            <h:outputText value="#{v.value}" />
        </p:column>
    </p:dataTable>
</h:body>

Backing Bean:

import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import org.primefaces.component.menuitem.MenuItem;
import org.primefaces.component.stack.Stack;

@ManagedBean
@ViewScoped
public class Test 
{

    private Value[] selectedValues;

    public List<Value> getValues()
    {
        List<Value> retVal = new ArrayList<Value>();
        retVal.add(new Value("a"));
        retVal.add(new Value("b"));
        return retVal;
    }

    public Value[] getSelectedValues() {
        return selectedValues;
    }

    public void setSelectedValues(Value[] selectedValues) {
        this.selectedValues = selectedValues;
    }
}

Et un simple POJO qu'ils utilisent:

public class Value {

    private String value;
    public Value(String value)
    {
        this.value = value;
    }

    public String getValue()
    {
        return value;
    }

    public void setValue(String value)
    {
        this.value = value;
    }
}

Que par les réponses, j'ai mise à jour de la Table de données comme suit:

    <p:dataTable id="dt" var="v" value="#{test.values}" selectionMode="multiple"
                 selection="#{test.selectedValues}" rowKey="#{v.value}" >
        <p:column headerText="Test">
            <h:outputText value="#{v.value}" />
        </p:column>
        <p:ajax event="rowSelect"/>
        <p:ajax event="rowUnselect" />
    </p:dataTable>

Ceci, cependant, ne parvient toujours pas à appeler le setter setSelectedValues(); je leur ai fait dire aussi:

    <p:ajax event="rowSelect" update="@this" />
    <p:ajax event="rowUnselect" update="@this" />

Et ce que la lecture lorsqu'une ligne a été cliqué. Des idées?

Tu veux dire, vous voulez mettre de la ligne sélectionnée une fois que l'utilisateur clique sur la ligne? Exactement pourquoi ne pas simplement plus tard lors de la réalisation de l'action désirée sur les lignes? (comme ce serait le cas par défaut)
Oui c'est correct. La raison, je profite de cette approche est que j'ai un PrimeFaces Pile de menu. Lorsque l'utilisateur clique sur l'un des MenuItems, un ActionListener est déclenché. Lorsque j'essaie d'accéder aux lignes de la ActionListener, ils n'ont pas été encore fixé. Maintenant je suppose que vous êtes mieux cerner serait possible si il possible de soumettre le formulaire à partir de la MenuItem.
Ah bon... je vais poster une réponse de toute façon.

OriginalL'auteur user489041 | 2012-11-19