2

我在 JBoss 7 上使用带有 primefaces 的 JSF 2.0。在代码的某些部分,我有以下内容:

public void setItemValue(int value) {
    this.value = value;
}

在 xhtml 中:

<p:commandButton ajax="true" value="Button" update="@form" 
action="#{bean.setItemValue(1)}"/>

问题是,当我单击按钮时,我得到一个javax.el.MethodNotFoundException,说不setItemValue(java.lang.Long)存在。当然不是,它应该是一个 int 或 Integer 值!有人见过这个问题吗?除了改变我的接收方法之外还有其他选择吗?谢谢!

编辑:刚刚下载了 JBoss 7.2 的 SNAPSHOT,它运行良好。看起来它是 JBoss 7.1.1 的错误 :(

4

4 回答 4

3

看起来有点奇怪,但是你可以在 EL 2.2 内部的 Long 对象 self 上调用方法 intValue

<p:commandButton ... action="#{bean.setItemValue((1).intValue())}"/>
于 2013-08-16T08:37:44.947 回答
1

动作的方法表达式类型是

字符串动作()

所以使用

 public String setItemValue(Integer value) {
    this.value = value;
    return null;
}

也可以看看:

更新 您需要将 Servlet 版本声明为 3.0 以充分利用 EL 2.2,例如传递参数。为此,将 web.xml 中的 web-app 元素更改为:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       
 xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
 http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID"  
 version="3.0">
于 2012-07-03T00:31:56.003 回答
1

不要在任何 bean 方法中使用getset添加前缀(这是一个非常糟糕的做法),action属性需要一个方法名称而不是一些 getter 或 setter

get并且set仅用于 bean 变量的 getter 和 setter

最好用类似的setItemValue东西替换你的assignItemValue

像这样:

<p:commandButton ajax="true" value="Button" update="@form" 
    action="#{bean.assignItemValue(1)}"/>

在哪里

public void assignItemValue(Long value) { //you could also try with int value...
   //set the value to whenever you want too...
}
于 2012-07-03T05:22:51.193 回答
0

Apologies for resurrecting this ancient thread. If you are still using Jboss 7.11 or hit similar issues and don't want to go the EL (1).intValue() route, you can also jippo your way around it in your managed bean as follows :-

public String setItemValue(Long longVal) {
    return setItemValue(longVal.intValue());
}
于 2016-03-04T13:29:32.363 回答