| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3401 人关注过本帖
标题:JSF的ValueChangeListener出现空指针异常
取消只看楼主 加入收藏
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
 问题点数:0 回复次数:10 
JSF的ValueChangeListener出现空指针异常
编了一个很简单的jsf例子,就是选择一个下拉框中的选项,然后当前页面同时显示出新值和旧值。新值没问题,但是把旧值那一行代码打上去就出现空指针异常,请问是怎么回事?
ValueChangeListenerTest.java:
package src;

import javax.faces.model.*;
import javax.faces.event.*;

public class ValueChangeListenerTest {
    private SelectItem[] races = {new SelectItem("HUM"), new SelectItem("ORC"), new SelectItem("UD"), new SelectItem("NE")};
    
    private String selectedRace;
    private String oldRace;

    public String getOldRace() {
        return oldRace;
    }

    public void setOldRace(String oldRace) {
        this.oldRace = oldRace;
    }

    public SelectItem[] getRaces() {
        return races;
    }

    public void setRaces(SelectItem[] races) {
        this.races = races;
    }

    public String getSelectedRace() {
        return selectedRace;
    }

    public void setSelectedRace(String selectedRace) {
        this.selectedRace = selectedRace;
    }
    
    public void selectRace(ValueChangeEvent e) {
        selectedRace = e.getNewValue().toString();
        oldRace = e.getOldValue().toString();
    }
}
页面显示文件:valueChangeListener.jsp:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib uri="http://java. prefix="f" %>
<%@taglib uri="http://java. 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>Value Change Listener Test</title>
</head>
<body>
<f:view>
    <h:form>
        Select a race:
        <h:selectOneMenu immediate="true" valueChangeListener="#{vclt.selectRace}" onchange="submit();">
            <f:selectItems value="#{vclt.races}"/>
        </h:selectOneMenu><br/>
        This is the race you selected:
        <h:outputText value="#{vclt.selectedRace}"></h:outputText><br/>
        This is your last race:
        <h:outputText value="#{vclt.oldRace}"></h:outputText>
    </h:form>
</f:view>
</body>
</html>
红色那行提示空指针。我试过在ValueChangeListenerTest.java中设置一个初始值,不行;在faces-config.xml也设置过初始值,还是不行,应该怎么解决?
搜索更多相关主题的帖子: 空指针 JSF SelectItem new 
2008-01-29 14:45
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
顶起来,getOldValue()什么情况下可以用啊?

I'm here, as always...
2008-01-30 09:39
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
<h:selectOneMenu immediate="true" value="#{vclt.oldRace}" valueChangeListener="#{vclt.selectRace}" onchange="submit();">
我加了红色的部分,其他代码没有改动,而且原来的java文件里面也有这个oldRace,但是还是同样的异常啊...

I'm here, as always...
2008-01-31 09:58
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
你的没问题,我的Tomcat是5.0的,会是这个问题?

I'm here, as always...
2008-01-31 10:18
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
public void selectRace(ValueChangeEvent e) {
        //selectedRace = e.getNewValue().toString();
        //oldRace = e.getOldValue().toString();
        System.out.println(e.getNewValue());
        System.out.println(e.getOldValue());
    }
我把我的改成这样了,就用System.out来输出,第一次输出的旧值的确是null,但是以后的就没问题了。能否设置刚开始的旧值?我试过两个方法都不行

I'm here, as always...
2008-01-31 10:21
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
问题发现了,就是你说的selectOneMenu中的value属性,我添加好这个属性就没有异常,去掉这个属性又出现空指针异常了。但是现在的问题是在我的jsp页面上,旧值总是与新值相同,但是控制台的输出却是正常的...
public void selectRace(ValueChangeEvent e) {
        selectedRace = e.getNewValue().toString();
        oldRace = e.getOldValue().toString();
        System.out.println(e.getNewValue());
        System.out.println(e.getOldValue());
        System.out.println();
    }
下面是jsp页面的部分:
This is the race you selected:
        <h:outputText value="#{vclt.selectedRace}"></h:outputText><br/>
        This is your last race:
        <h:outputText value="#{vclt.oldRace}"></h:outputText>
明显selectedRace和oldRace是不一样的,但是输出总是和新值一样...

I'm here, as always...
2008-01-31 10:32
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
那么如何让页面能够显示出正常的旧值?

I'm here, as always...
2008-01-31 10:38
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
是session

I'm here, as always...
2008-01-31 10:38
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
当我改变下拉框后,新值变了,为何旧值也是新值?新值变了说明服务器端运行了啊,但是旧值为什么就不正常呢?

I'm here, as always...
2008-01-31 10:42
hwoarangzk
Rank: 4
来 自:冰封王座
等 级:贵宾
威 望:12
帖 子:1894
专家分:0
注 册:2007-7-17
收藏
得分:0 
厄...仍然无法正常显示旧值...还是和新值一样...控制台输出倒是正常...

I'm here, as always...
2008-01-31 10:46
快速回复:JSF的ValueChangeListener出现空指针异常
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013120 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved