出现action jsp提交时,是新的请求.所以页面就刷新

各位大虾好. 

    我在开发Jsf程序时,遇到一个这样奇怪的问题.请看下面代码.

<h:form id="edit">
       
         
      <h:panelGrid columns="2" width="100%" style="width: 448px; height: 317px">
          <h:outputLabel value="仓库编码:" /><h:inputText id="whCode" value="#{wh.whCode}" />
          <h:outputLabel value="仓库名称:" /><h:inputText id="whName" maxlength="10" value="#{wh.whName}"></h:inputText>
          <h:outputLabel value="管理部门"/><h:inputText id="deptName" value="#{wh.deptName }" οnclick="selectDept();"/>
          <h:outputLabel value="负责人"/><h:inputText id="empName" value="#{wh.empName }" οnclick="selectEmp();"/>
          <h:outputLabel value="仓库属性"/><h:selectOneMenu id="whType" value="#{wh.whType}"><f:selectItem itemLabel="总仓" itemValue='Y'/><f:selectItem itemLabel="分仓" itemValue='N'/></h:selectOneMenu>
          <h:outputLabel value="仓库介绍"/><h:inputTextarea id="remark" rows="5" value="#{wh.remark}"></h:inputTextarea>
          
        <h:messages style="display:none;" id="errorinfo"/><h:inputHidden id="deptCode" value="#{wh.deptCode }" />
        <h:inputHidden id="empCode" value="#{wh.empCode}" /><h:outputText value="" id="t1"/>
     <h:commandButton value="添加仓库" type="submit" id="submit1" action="#{wh.saveWarehouseInfo}"></h:commandButton><h:outputText value="" id="t2"/>
     </h:panelGrid>
         
     </h:form>


问题如下: 点加添加仓库按钮时,有时数据能添加成功.有时就只是刷新页面,就好像点击了表单的重置按钮一样,(假如我把内容全部为空,点加添加仓库按钮,他确每次都成功添加数据,但只要输入了内容添加数据成功的机率只有30%.)
注:我把wh的托管bean作用域设置为request与session都无效.  
  •  

#1 得分:10 回复于: 2007-08-23 08:49:20
你的后台代码有问题

不是JSF的问题

#2 得分:10 回复于: 2007-08-23 08:57:53
沒做跟蹤調試嗎?從錯誤中找問題吧。
 |  举报 管理
#3 得分:0 回复于: 2007-08-23 09:18:17
回:zqpsswh(似水无痕) 兄弟

     后台怎么会有问题呢?..我是按标准做的托管bean. 如果有问题,应该是那有问题呢???


回:livan1038(李枫) 兄弟
     我在"#{wh.saveWarehouseInfo}"这个方法中的第一行设置了断点. 点击提交时如果结果是刷新页面的话它根本不激活断点. 从而我无法进行跟踪调试. 如果断点激活了,这次提交的数据肯定能添加进去.

 
打开你的错误显示:<h:messages style="display:none;" id="errorinfo"/>,去掉display:none;看看报什么错误,还有一种排查错误方法,就是你先删除有怀疑的一个组件,然后再试另一个,如果按你所说的情况,多半是数据转换时发生的错误,这种错误就是不报错误,且不能提交页面,请重点检查你的<h:selectOneMenu id="whType" value="#{wh.whType}"><f:selectItem itemLabel="总仓" itemValue='Y'/><f:selectItem itemLabel="分仓" itemValue='N'/></h:selectOneMenu>部分
 |  举报 管理
#5 得分:0 回复于: 2007-08-23 10:08:16
回:mxm_1123(无名)兄弟

   我将:<h:messages style="display:none;" id="errorinfo"/>,去掉display:none了,并不会提示什么错误. 另我将<h:selectOneMenu id="whType" value="#{wh.whType}"><f:selectItem itemLabel="总仓" itemValue='Y'/><f:selectItem itemLabel="分仓" itemValue='N'/></h:selectOneMenu>部分删除了. 效果依旧..

 按Jsf的生命周期   恢复视图->应用请求值->处理验证->更新模型值->调用应用程序->Render显示

 程序应该是应用请求值后就直接跳到Render显示了.. 按理说,如果是新请求才会直接跳转的呀,这是为什么呢?..
mxm_1123
关注
mxm_1123
mxm_1123
本版等级: T6
#6 得分:0 回复于: 2007-08-23 10:23:01
提交后直接跳转,我说过了多半是数据转换时的错误,你首先要做的是先查出哪个组件出现了问题,然后再解决,你不是不输入数据就能提交吗?你可按以下的方法查找发生错误的组件,一次只输入一个组件的数据,然后提交,每次只提交一个组件的数据,逐个排查,肯定能找到错误原因出现在哪个组件上。
jxpxwym
关注
jxpxwym
jxpxwym
本版等级: T1
#7 得分:0 回复于: 2007-08-23 10:24:20
我做了一个PhaseLisener
发现在我提交不成功的时候出现以下信息(Tomcat5.028控制台输出的)..

请求开始
RESTORE_VIEW 1
RESTORE_VIEW 1
RENDER_RESPONSE 6
RENDER_RESPONSE 6
操作完成!

这就说明,当提交时,完全把它当作了一个新请求("没有回传")看待. 直接跳到输出了.
jxpxwym
关注
jxpxwym
jxpxwym
本版等级: T1
#8 得分:0 回复于: 2007-08-23 10:29:39
提交成功时显示

请求开始
RESTORE_VIEW 1
RESTORE_VIEW 1
APPLY_REQUEST_VALUES 2
APPLY_REQUEST_VALUES 2
PROCESS_VALIDATIONS 3
PROCESS_VALIDATIONS 3
UPDATE_MODEL_VALUES 4
UPDATE_MODEL_VALUES 4
INVOKE_APPLICATION 5
INVOKE_APPLICATION 5
RENDER_RESPONSE 6
RENDER_RESPONSE 6
操作完成!

回:mxm_1123(无名) 

没成功时提交直接从RESTORE_VIEW跳到RENDER_RESPONSE了. 应该是数据验证转换都没有执行吧?
mxm_1123
关注
mxm_1123
mxm_1123
本版等级: T6
#9 得分:0 回复于: 2007-08-23 10:36:43
在组件上加上required="true"不就知道它执行了没有吗?
jxpxwym
关注
jxpxwym
jxpxwym
本版等级: T1
#10 得分:0 回复于: 2007-08-23 10:55:46
回mxm_1123(无名)兄弟:

      加上了,效果和以前没什么区别. 我不输内容,它会出现必须输入内容的错误提示. 我输入内容后结果依然是刷新页面.
 
提交不成功时,控制台还是输出:

请求开始
/basic/add_wh.jsf RESTORE_VIEW 1
/basic/add_wh.jsf RESTORE_VIEW 1
/basic/add_wh.jsf RENDER_RESPONSE 6
/basic/add_wh.jsf RENDER_RESPONSE 6
操作完成!


mxm_1123
关注
mxm_1123
mxm_1123
本版等级: T6
#11 得分:0 回复于: 2007-08-23 11:47:59
你用的是sun jsf1.1吧,这个版本就有个bug说的是commandbutton不提交,建议你下载sun jsf1.2或者是改用myfaces,myfaces是不用出现这种问题的。
jxpxwym
关注
jxpxwym
jxpxwym
本版等级: T1
#12 得分:0 回复于: 2007-08-23 12:12:36
回mxm_1123(无名) 兄弟:

呵呵,我终于发现问题所在了.

我只要不点击<管理部门>与<负责人>这两个输入框,系统就可以正常的添加数据.
原因:<管理部门>点击时,会弹出新窗口,新窗口中显示的select_dept.jsf文件. 当弹出select_dept.jsf时,就会产生select_dept的UIViewRoot. ,问题就在这里,select_dept.jsf中的UIViewRoot居然会将原来父窗口中add_wh.jsf的UIViewRoot替换掉.这样就会出现add_wh.jsf提交时,找不到原来的UIViewRoot.从而认为是新的请求.所以页面就刷新了.


但是如何解决这个问题,我目前还没想到.我现在确实用的是SUN JSF1.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值