0

助けが必要です。f:setPropertyActionListenerJSFでの使用に問題があります。問題は、JSF がターゲット メソッドに値を設定していないことです。

xhtml コードの一部は次のとおりです。

<h:form>
    <fieldset style="width:100; margin-left: 350px; margin-top: 250px; position:absolute; border-style: none">
        <p:dataGrid var="prod" value="#{productoController.arrProductosRelevantes}" 
                    columns="5" rows="10" paginator="true">

            <p:panel style="text-align:center">  
                <h:panelGrid columns="1" style="width:100%" columnClasses="colStyle1" rowClasses="rowStyle1" >  
                    <p:graphicImage value="#{prod.imagenUrl}" style="width:100px; height:100px"/>   
                    <h:outputText value="#{prod.marca}" style="width:40px"/>  
                    <p:commandLink value="Ver" action="#{productoController.visualizarProducto()}">  
                        <f:setPropertyActionListener value="#{prod}"   
                                                     target="#{productoController.productoSeleccionado()}" />  
                    </p:commandLink>
                </h:panelGrid>  
            </p:panel>  
        </p:dataGrid>  
    </fieldset>
</h:form>

バッキング Bean は次のとおりです (最も関連性の高いもの)。

public Producto getProductoSeleccionado() {
    return productoSeleccionado;
}

public void setProductoSeleccionado(Producto productoSeleccionado) {
    if (productoSeleccionado != null) {
        this.productoSeleccionado = productoSeleccionado;
        arrComentarios = null;
        arrProductosComplementarios = null;
        arrProductosSuplementarios = null;
    }
}

public String visualizarProducto() {
    if (arrComentarios == null) {
        obtenerComentarios();
    }
    if (arrProductosComplementarios == null) {
        obtenerArrProductosComplementarios();
    }
    if (arrProductosSuplementarios == null) {
        obtenerArrProductosSuplementarios();
    }
    return "visualizarProducto.xhtml?faces-redirect=true";
}


public ArrayList<Producto> getArrProductosRelevantes() {
    return arrProductosRelevantes;
}

public void obtenerArrProductosRelevantes() {
    clienteDAO = new ClienteDAO();
    productoDAO = new ProductoDAO();
    cliente = clienteDAO.getClientePorId(Sesion.IDCLIENTE);
    arrProductosRelevantes = productoDAO.obtenerProductoRelevantesPorCliente(cliente);
}

ちなみに@SessionScopedを使っています。

どんな助けでも感謝します、ありがとう。

4

1 に答える 1

1

ターゲット属性はf:setPropertyActionListener、メソッドではなくプロパティであると想定されています。つまり、設定すると、 Beanのメソッドtarget="#{productoController.productoSeleccionado}"が呼び出され、 value属性に設定した値が引数として渡されます。setProductoSeleccionado(Producto prod)productoController

productoSeleccionado()コードに存在しない可能性のあるメソッドを参照しています。したがって、括弧を失うだけで問題ありません。

<f:setPropertyActionListener value="#{prod}"
               target="#{productoController.productoSeleccionado}" />
于 2012-12-18T19:35:50.687 に答える