我有两个很简单的jsp页面,第一个包含一些input输入标签和一个Submit、reset按钮,第二个页面负责显示第一个页面提交后的信息。因为用jsf做的,里面还用到了一个bean用来绑定input的值,这个bean的scope是session的。问题出来了,当我填写好信息后提交页面的时候,有时候可以正常的切换到第二个页面,有时候就会按下提交按钮后页面刷新一下而没反应。即使成功了一次,如果再次进入第一个页面重新填写信息并提交的话就一定不会转到第二个页面,状况还是那样,我在提交按钮的action方法开头设置了控制台输出,提交无效的时候控制台什么都不输出,就是说点了提交按钮后,他的action关联的方法根本没有被调用!现在系统能不能调用这个action方法都要靠“碰运气”,我还没发现什么规律。有时候url后面还自动加上一串生成的session号码,在提交一次这个附在url后面的session又没有了,但还是停留在第一个页面上,什么时候会出现这个session号码我还没找到规律。我目前可以确定的是,只要提交过一次后,大概过几分钟在提交的话就又可以“正常一次”了,不知道谁能告诉我这是什么原因?我应该怎么解决这个问题?
第一个页面user_reg.jsp
[code]
<%@ page contentType="text/html; charset=GB2312" %>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<html>
<head>
<title>用户注册</title>
</head>
<body bgcolor="#ffffff">
<h1 align="center">用户注册</h1>
<f:view>
<h:form id="userform">
用户名:<br />
<h:inputText id="Username" value="#{UserHandler.user.username}"/><br />密码:<br />
<h:inputSecret id="Password" value="#{UserHandler.user.password}"/><br />确认密码:<br />
<h:inputSecret id="Repassword"/><br />
<h:commandButton id="submit"  value="注册" action="#{UserHandler.create}" />
<h:commandButton id="reset" value="重填" immediate="true" type="reset"/>
</h:form>
</f:view>
</body>
</html>
[/code]第二个页面不贴了,完全就是outputText标签,只要提交成功就没问题。
bean:
[code]
public class UserHandler { 
  private User user;
  public String create() {
    //做一些建立数据库联接的工作并把数据写入数据库
    //如果成功返回“Success”给jsf导航器
    //如果有同名的用户返回“SameUser”给jsf导航器
  }
  //还省略了一些无关的方法和字段
}
[/code]下面是faces-config.xml配置文件
[code]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config xmlns="http://java.sun.com/JSF/Configuration">
<managed-bean>
<managed-bean-name>UserHandler</managed-bean-name>
<managed-bean-class>user.UserHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/user_reg.jsp</from-view-id>
<navigation-case>
<from-action>#{UserHandler.create}</from-action>
<from-outcome>Success</from-outcome>
<to-view-id>/user_info.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-action>#{UserHandler.create}</from-action>
<from-outcome>SameUser</from-outcome>
<to-view-id>/user_reg.jsp</to-view-id>
<redirect />
</navigation-case>
</navigation-rule>
</faces-config>
[/code]
web.xml文件就写了一个Faces Servlet,别的啥都没有。请各位帮忙看看到底是什么问题,这几天看了很多例子,都没什么头绪,我实在看不出来哪的问题了

解决方案 »

  1.   

    <managed-bean-scope>session</managed-bean-scope>不用session,用request
      

  2.   

    你的写法不好,JSF的CommandButton中最好通过action定义from_outcome的属性,可以像你一样,绑定到一个返回String的方法中,比如TestBean的getOutCome(),然后在CommandButton中就写成action="#{TestBean.outCome}",actionListener定义具体的ActionEvent,在ActionEvent中改变返回的outCome值,然后在xml配置文件中就可以把这一行:<from-action>#{UserHandler.create}</from-action> 去掉。
      

  3.   

    这个应该是缓存的事,在页面里面清空缓存
    试一下
    你有没有试过启动一次停止一下服务再启动服务,再注册一下看看,看能否行的通.
    [email protected]