无法使用[1]参数找到方法[someMethod]

时间:2014-02-25 21:16:30

标签: spring hibernate maven jsf-2 primefaces

我有一个HIBERNATE DAOImpl使用以下方法,将变量作为参数传递..

  public List<Oportunidad> verParticipantes(String numeroOportunidad) throws DAOException {
    List<Oportunidad> lista = getHibernateTemplate().find("SELECT c.cliente FROM Oportunidad o ,OportunidadParticipante op,"
            + "Cliente c WHERE op.oportunidad=o.id and c.idCliente=op.cliente and o.numeroOportunidad=?",numeroOportunidad);
     return lista;
}

和ServiceImpl

public List<Oportunidad> verParticipantes(String numeroOportunidad)throws DAOException {    
    return getOportunidadDao().verParticipantes(numeroOportunidad);
}

这两个接口都使用了。 这些编译运行时junit进行测试。 Goog,非常好


问题是,当我想从selectOneListboxt传递参数时实现了一个JSF primefaces

代码ManagedBean:

  public String getVerParticipantes(String numeroOportunidad) throws DAOException{
    Oportunidad o = new Oportunidad();
    o.setNumeroOportunidad(numeroOportunidad);
      verParticipantes.addAll(getOportunidadService().verParticipantes(numeroOportunidad));
    return  "envioCotizacion.xhtml";
}

JSF代码(.xhtml):

<p:selectOneListbox id="listaCliente" value="#{clienteMB.cliente}"  style="width:26%; height:90%;  position:absolute; top:10%; left:12%;">   
                    <f:selectItems value='#{oportunidadMB.verParticipantes("prueba")}'/> 
                    <!--  <f:param name="numeroOportunidad" value="prueba" />-->
                    <p:ajax id="numeroOportunidad" listener='#{oportunidadMB.verParticipantes("prueba")}'></p:ajax> 
                </p:selectOneListbox>

错误屏幕:::::::::

javax.el.MethodNotFoundException: Unable to find method [verParticipantes] with [1] parameters
    at javax.el.BeanELResolver.invoke(BeanELResolver.java:444)
    at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:161)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:173)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
    at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
    at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
    at javax.faces.component.UISelectItems.getValue(UISelectItems.java:129)
    at org.primefaces.renderkit.InputRenderer.getSelectItems(InputRenderer.java:55)
    at org.primefaces.component.selectonelistbox.SelectOneListboxRenderer.encodeMarkup(SelectOneListboxRenderer.java:49)
    at org.primefaces.component.selectonelistbox.SelectOneListboxRenderer.encodeEnd(SelectOneListboxRenderer.java:42)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:176)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:894)
    at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:70)
    at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:57)
    at org.primefaces.component.layout.LayoutUnitRenderer.encodeEnd(LayoutUnitRenderer.java:51)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:924)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1863)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1859)
    at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:443)
    at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)

帮助我plis ......不再与此错误有关。

2 个答案:

答案 0 :(得分:0)

将方法名称getVerParticipantes更改为verParticipantes。监听器方法不需要是getter。

此外,您不能将侦听器视为一个动作,因此它应该是返回类型的void,例如

public void getVerParticipantes(String numeroOportunidad) throws DAOException{
    Oportunidad o = new Oportunidad();
    o.setNumeroOportunidad(numeroOportunidad);
      verParticipantes.addAll(getOportunidadService().verParticipantes(numeroOportunidad));
    //if you want to navigate then do here dynamically.
}

答案 1 :(得分:0)

<f:selectItems value='#{oportunidadMB.verParticipantes("prueba")}'...

应该是

<f:selectItems value='#{oportunidadMB.getVerParticipantes("prueba")}'...

但 getVerParticipantes也应该返回一个不是String的列表!

public List<Oportunidad> verParticipantes(String numeroOportunidad)throws DAOException

在服务中声明但是管理oportunidadMB只有方法getVerParticipantes返回一个字符串而不是列表,所以你怎么能调用

value='#{oportunidadMB.verParticipantes("prueba")}'