2012-12-18 23 views
0

我需要一些幫助。我在JSF上使用f:setPropertyActionListener時遇到問題。問題是JSF沒有在目標方法上設置任何值。F:setPropertyActionListener不調用方法

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。

任何幫助將不勝感激,謝謝。

回答

1

目標屬性f:setPropertyActionListener應該是一個屬性,而不是一個方法。這意味着,如果設置target="#{productoController.productoSeleccionado}",它會調用在productoController豆的setProductoSeleccionado(Producto prod)方法,將作爲參數您爲屬性設置的值。

你是指一個方法productoSeleccionado()這很可能不是在你的代碼,甚至存在。所以,僅僅失去了括號,你應該罰款:

<f:setPropertyActionListener value="#{prod}" 
       target="#{productoController.productoSeleccionado}" /> 
+0

其實有一個名爲setProductoSeleccionado(),因爲我已經在backbean代碼前面所示方法即使脫掉了括號 –

+0

而且它不會設置產品,我已經通過其他JSF頁面使用了該方法,但是在這個頁面中它只是不起作用 –

+0

我知道setter在那裏,但你不是指它,而是指'productoSeleccionado()'方法。現在,當你取消括號時,那麼二傳手是真正被引用的,爲什麼它現在不工作,這可能是另一回事。你的豆的範圍是什麼? – elias