Pregunta

Estoy usando un Richfaces ' picklist y quiero llenar el panel del lado derecho con una lista de SelectItems de mi bean de respaldo.

Rellenar el lado izquierdo no es un problema desde el bean de respaldo, sin embargo, el lado derecho es problemático.

Esto es lo que tengo actualmente

<h:outputText value="Roles" />
<rich:pickList showButtonsLabel="false">
    <f:selectItems value="#{Bean.allRoles}" />
</rich:pickList>

EDIT:

Entonces tengo los roles 'a', 'b', 'c' y 'd'.

El usuario tiene los roles 'a' y 'd', por lo que 'a' y 'd' deben estar en el panel del lado derecho y 'b' y 'c' deben estar en el panel del lado izquierdo.

EDIT:

Explicación adicional.

Tengo tres listas para el usuario.

  1. Todos los roles posibles (a través de d)
  2. Todos los roles de los que el usuario forma parte (ayd)
  3. Todos los roles de los que el usuario NO forma parte (byc)

Todas las listas tienen el tipo de datos ArrayList<SelectItem>.

Necesito la capacidad de mover roles individuales entre la lista número 1 y la lista número 2 y luego guardar el nuevo conjunto de roles. Pensé que la lista de selección sería el mejor objeto de richfaces para el trabajo.

¿Fue útil?

Solución

Desea este código:

<h:outputText value="Roles" />
<rich:pickList showButtonsLabel="false" value="#{bean.chosenRoles}">
    <f:selectItems value="#{Bean.allRoles}" />
</rich:pickList>

y en tu bean quieres:

private String[] chosenRoles;

+ getter/setter 

Cuando quiera hacer roles predeterminados, simplemente agregue los roles en la matriz de Roles elegida (por ejemplo, en el constructor de beans). De esa manera, elegidoRoles siempre contendrá los elementos en el lado derecho de la lista de selección, mientras que los elementos en el lado izquierdo no están en la matriz.

¡Espero que esto ayude!

Otros consejos

Parece que encontré la solución.

<rich:pickList value="#{aBean.rightSideValues}"> 
        <f:selectItems value="#{aBean.leftSideValues}"/>
</rich:pickList>
  • "#{aBean.rightSideValues}" debe apuntar a la lista o matriz de objetos. Con estos valores del lado derecho de la lista de selección se completará.

  • #{aBean.leftSideValues} debe apuntar a la lista de SelectItem objeto.

UN AVISO: el objeto SelectItem DEBE SER construido con objetos del SomeObject.equals() .

Ejemplo .

class ABean{
   ...
   List<SomeObject> getRightSideValues(){
    ...
  }

   List<SelectItem> getLeftSideValues(){
      List<SomeObjects> someObjects = getAllAvailableObjects();
      List<SelectItem> sItems = new ArrayList<SelectItem>(); 
      for(SomeObject sObj : someObjects){
          SelectItem sItem = new SelectItem(sObj, sObj.toString());
          sItems.add(sItem);
      }
      return sItems;
}

Observe que SelectItem toma el primer argumento y este argumento es la referencia a SomeObject. En las partes internas, las caras ricas compararán objetos de <=> con objetos de <=> con ayuda del método

<=>

Si necesita valores distintos al texto, debe hacer un convertidor.

Ver http://programmingnutsandbolts.blogspot.com/2009/ 08 / richfaces-picklist-converters.html

Como en RF 4.3.3 y probablemente también antes, también debe anular el método hash de su clase de modelo (bean de entidad). Por lo tanto, solo anular el método de igualdad para su convertidor no es suficiente. Lo siguiente funcionó para mí y mi bean de entidad PubThread.

    @Override
    public boolean equals(Object obj) {
        if (obj == null)
            return false;
        if (!(obj instanceof PubThread))
            return false;
        PubThread objectToCheck = (PubThread) obj;
        boolean isShallowCopy = (this.id.equals(objectToCheck.id));
        return isShallowCopy;
    }

    @Override
    public int hashCode() {
        return (this.id.hashCode());
    }

Establezca el valor de pickList en una matriz del valor de SelectItem.

Lo que sea que comience en el lado derecho básicamente será el valor predeterminado de la lista de selección:

    <rich:pickList value="#{aBean.rightSideValues}"> 
        <f:selectItems value="#{aBean.leftSideValues}"/>
    </rich:pickList>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top