¿Por qué "cc" es nulo dentro de la acción de un botón de comando en mi componente compuesto Facelets?

Tengo un componente Facelets Composite que incluye, entre otras cosas, un botón de comando:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<ui:component xmlns="http://www.w3.org/1999/xhtml" 
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:ui="http://java.sun.com/jsf/facelets"
          xmlns:cc="http://java.sun.com/jsf/composite" 
          xmlns:ice="http://www.icesoft.com/icefaces/component"
          xmlns:nc="http://compositecomps.sss.evla.nrao.edu/jsf"
          xmlns:opt="http://java.sun.com/jsf/composite/components/opt"
          xmlns:undo="http://undo.sss.evla.nrao.edu/jsf"
          xmlns:n="http://sss.evla.nrao.edu/jsf"
          xmlns:f="http://java.sun.com/jsf/core">
<cc:interface>
  <cc:attribute name="value" type="edu.nrao.sss.tools.obsprep.bulkedit.BulkEditor"                      required="true"/>
  <cc:attribute name="loop"  type="edu.nrao.sss.tools.obsprep.uiactions.project.scan.ScanLoopUIActions" required="true"/>
</cc:interface>

<cc:implementation>
  <ui:param name="loop" value="#{cc.attrs.loop}"/>
  <ui:param name="val"  value="#{cc.attrs.value}"/>

  <ice:panelGroup id="wizStep1"
                  rendered="#{val.readyToSelect}">
    <nc:header value="select fields to filter on"/>
    <ice:commandButton value="#{val.nameField.value}" action="#{val.select}"/>
    <table cellpadding="5">
      <thead>
        <tr>
          <th></th><th>Field</th><th>Search For</th><th></th>
        </tr>
      </thead>
      <tbody>
        <opt:bulkEditField value="#{val.nameField}">
          <f:facet name="summary">
            <ice:inputText value="#{val.nameField.value}"/>
          </f:facet>
        </opt:bulkEditField>
      </tbody>
    </table>
    <ice:commandButton value="Select" action="#{val.select}"/>
  </ice:panelGroup>
</cc:implementation>
</ui:component>

He cambiado el código para usar val.nameField.value como etiqueta para el primer botón de comando para demostrar el problema.

Cuando uso este componente en una página, muestra el botón y una lista de campos de búsqueda debajo. Si cambio el valor del campo de nombre, la etiqueta del botón cambia.

Sin embargo, si hago clic en el botón, obtengo una excepción de destino inalcanzable:

Caused by: javax.el.PropertyNotFoundException: /resources/components /opt/bulkEdit.xhtml @25,79 action="#{val.select}": Target Unreachable, identifier 'val' resolved to null

Siento que me debo estar perdiendo algo fundamental sobre cómo funcionan estos componentes compuestos. Esto funcionó bien como un archivo de etiquetas en facelets/JSF 1.2. En el proceso de actualización a JSF 2.0, quería pasar a usar componentes compuestos para poder tener una interfaz definida.

Si dejo de usar <ui:param/> y poner cc.attrs.value en directo me dice que cc es nulo.

Pensé que esto podría ser un error en las caras de hielo, pero cambiar a normal <h:commandButton/> hace lo mismo

Gracias por cualquier consejo que pueda tener.

preguntado el 22 de mayo de 12 a las 18:05

1 Respuestas

Este es un error en ICEfaces 2.0. Tiene una UISeries (panelTabSet o dataTable) que contiene el componente compuesto. Ver http://jira.icesoft.org/browse/ICE-7142. Está arreglado en 3.0.

Respondido el 20 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.