hwoarangzk 发表于 2008-1-17 09:57

JSF的javax.faces.el.MethodNotFoundException

初学遇到奇怪的问题,怎么改都没用,求教大家了!calculator.jsp页面要求输入两个数,然后选择一个方法,然后就跳转到result.jsp页面显示结果。但是点击方法后总会显示这个异常。
[color=Red]calculator.jsp:[/color]
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>   
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Calculate Page</title>
</head>
<body>
<h1>JSF Calculator Example</h1><br/>
<f:view>
        <h:form>
                <table>
                        <tr>
                                <td><b>First Number:</b></td>
                                <td><h:inputText value="#{cal.firstNum }" /></td>
                        </tr>
                        <tr>
                                <td><b>Second Number:</b></td>
                                <td><h:inputText value="#{cal.secondNum }" /></td>
                        </tr>
                </table>
                <h:commandButton value="+" action="#{cal.add }" />
                <h:commandButton value="-" action="#{cal.minus }" />
                <h:commandButton value="*" action="#{cal.multiply }" />
                <h:commandButton value="/" action="#{cal.divide }" />
        </h:form>
        <h:outputLink value="index.faces" ><h:outputText value="abc" /></h:outputLink>
</f:view>
</body>
</html>
[color=Red]result.jsp:[/color]
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h" %>  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Calculate Result Page</title>
</head>
<body>
<h1>Calculator Result Page</h1><br/>
<f:view>
        First Number:<h:outputText value="#{cal.firstNum }" /><br/>
        Second Number:<h:outputText value="#{cal.secondNum }" /><br/>
        Result:<h:outputText value="#{cal.result }" />
       
</f:view>
</body>
</html>
然后是两个类:
[color=Red]Calculator.java:[/color]
package src;

public class Calculator {

        public double add (double a, double b) {
                return a + b;
        }

        public double minus (double a, double b) {
                return a - b;
        }

        public double multiply (double a, double b) {
                return a * b;
        }
       
        public double divide(double a, double b) {
                if(b != 0) {
                        return a / b;
                } else {
                        return Double.MAX_VALUE;
                }
        }
}
[color=Red]CalculatorController.java:[/color]
package src;

public class CalculatorController {
       
        private double firstNum = 0;
        private double secondNum = 0;
        private double result = 0;
        private Calculator calculator = new Calculator();
       
        public String add() {
                result = calculator.add(firstNum, secondNum);
                return "complete";
        }
       
        public String minus() {
                result = calculator.minus(firstNum, secondNum);
                return "complete";
        }
       
        public String multiply() {
                result = calculator.multiply(firstNum, secondNum);
                return "complete";
        }
       
        public String divide() {
                result = calculator.divide(firstNum, secondNum);
                return "complete";
        }
       
        public Calculator getCalculator() {
                return calculator;
        }
        public void setCalculator(Calculator calculator) {
                this.calculator = calculator;
        }
        public double getFirstNum() {
                return firstNum;
        }
        public void setFirstNum(double firstNum) {
                this.firstNum = firstNum;
        }
        public double getResult() {
                return result;
        }
        public void setResult(double result) {
                this.result = result;
        }
        public double getSecondNum() {
                return secondNum;
        }
        public void setSecondNum(double secondNum) {
                this.secondNum = secondNum;
        }
       
}
然后是配置文件[color=Red]faces-config.xml[/color]:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN" "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
        <navigation-rule>
                <navigation-case>
                        <from-outcome>complete</from-outcome>
                        <to-view-id>/result.jsp</to-view-id>
                </navigation-case>
        </navigation-rule>
       
        <managed-bean>
                <managed-bean-name>cal</managed-bean-name>
                <managed-bean-class>src.CalculatorController</managed-bean-class>
                <managed-bean-scope>session</managed-bean-scope>
        </managed-bean>
       
        <application>
                <locale-config>
                        <default-locale>en</default-locale>
                </locale-config>
        </application>
               
</faces-config>
为什么总提示找不到那几个方法?跟方法的返回类型有关系吗?谢谢!

liugy52 发表于 2008-1-17 10:59

可能是引用的某些包的版本过低,其内部实现上还没有提供LZ需要调用的这些API方法。有些开发包对其依赖的包的版本有最低限制的。

hwoarangzk 发表于 2008-1-17 11:44

我试过另外一个例子,就是验证用户名和密码的,方法还是我自己定义的,而且调用也像这个例子一样,可以运行,就不知道为什么这个不行...

hwoarangzk 发表于 2008-1-18 09:45

顶个

hwoarangzk 发表于 2008-1-21 10:38

沉第二页了[tk13]

hwoarangzk 发表于 2008-1-21 10:42

[tk13] 晕死啊~~~~~~~~~~~~
原来#{cal.add}这里,add和}之间不能有空格啊!!!
试了好久终于弄好了!!!
这个印象深刻了!!!

marer 发表于 2008-1-22 19:17

这个是方法名称错误的异常,找找代码中的EL表达式的方法名吧

marer 发表于 2008-1-22 19:19

另外,我现在也在使用JSF,版主有时间的话可以指教一下啊。我觉得JSF现在越来越像ASP.NET了,很多方面都像,不一样的地方就是ASP.NET有个用起来顺手的IDE罢了,很多事情都会帮你搞定。而JSF还比较手动化一点。不知道版主有没有同感

marer 发表于 2008-1-22 19:21

不知道版主用的什么IDE?介绍一下,我现在用的eclipse3.2虽然支持JSF,但总觉得用着不太爽,尤其是前台界面开发方面尤为不爽。

hwoarangzk 发表于 2008-1-23 09:26

我也用的Eclipse3.2,还行吧,就是没有找到本好教材,只有一个在线教程,只有结合点以前做的东西自己编,呵呵,用习惯了也不错感觉

页: [1]

编程论坛