Struts target is null for setProperty(null, "x", [Ljava.lang.String;@179da9f)以及图片实现提交造成出现重复提交的现象

来源:互联网 发布:流程优化的目的 编辑:程序博客网 时间:2024/05/22 04:51

今天做项目时,看见一个比较漂亮的登录图片,所以想试试用图片来代替submit

<input  id=IbtnEnter name="tijiao"  type=image src="adminimage/user_botton.gif">当然也确实达到了目的,是可以提交的,但却抛出这样的异常,很郁闷

ognl.OgnlException: target is null for setProperty(null, "x", [Ljava.lang.String;@1a48515)

    ognl.OgnlException: target is null for setProperty(null, "y", [Ljava.lang.String;@1d57c7)


可是我的表单里面是没有X,Y这样的提交信息的    虽然后台抛出这样的异常,但是它不影响程序的正常运行,所以一直也就没管它。

 

错误原因:因为使用struts在默认配置下对任何提交到action的参数强制需要setter方法,而我们在使用token的时候一般都没有正确的为每一个token设置该参数,为此提交的token信息就会在这里一起一些错误信息

解决方案:

方法一,struts.devMode = false它就不会提示了,但这样不好,因为不能因为你这个问题,而放弃使用struts.devMode = true这一功能

方法二:直接将上面input中的name去掉改成<input  id=IbtnEnter  type=image src="adminimage/user_botton.gif">



注意:

本来到这里问题已经解决了,但还有一个注意的地方不得不提,那就是使用图片来代替submit提交表单很容易会有人把它做成了重复提交了。

<form id="loginform" name="loginform" action="http://game.bluesky.cn/login.php" method="get"> 
<input name="name" /> 
<input type="image" src="login.gif" name="imagesubmit" /> 
</form> 



这段代码是正确的,不会有重复提交的问题。“<input type="image">”其实和“<input type="SUBMIT">”起到的作用是相同的,一点那个图片就会执行submit()操作。 
但有的人不放心,画蛇添足的给image加了个onclick动作,代码如:

<form id="loginform" name="loginform" action="http://game.bluesky.cn/login.php" method="get"> 
<input name="name" /> 
<input onclick="document.loginform.submit()" type="image" src="login.gif" name="imagesubmit" /> 
</form> 

这下子点一次图片按钮就提交两次了,重复提交由此产生。其功能就相当于: 

<input type="image" src="bt.gif" onclick="submit()"> 

采用这种方式可以避免使用图片按钮的重复提交 


但现在有三个这样的按钮在一起,我想按其中一个后,所有三个都不能再提交了。 
解决方案:

<script language="JavaScript"> 
function test(){ 
for(i=0;i<document.getElementsByName('t1').length;i++) 
document.getElementsByName('t1')[i].disabled=true; 

</script> 
<form name="f1" method="post" action="1.htm" target="_blank" onsubmit="test()"> 
<input type="image" name="t1" src="http://bbs.51js.com/images/standard/newtopic.gif"> 
<input type="image" name="t1" src="http://bbs.51js.com/images/standard/newtopic.gif"> 
<input type="image" name="t1" src="http://bbs.51js.com/images/standard/newtopic.gif"> 
</form> 

利用图片提交表单有两种方式: 
1.<input type="image" src="xxx.gif" > 
此图片会自动对Form表单进行提交,即为type="submit" 若提交前要进行判断、检验则用 

<input type="image" src="xxx.gif" onclick="return dosubmit();"> 

但是用这种方式提交会发生表单提交两次的现象,经常会造成表单元素被重复提交,数据库被写入异常!!
尤其是用IE问题比较严重,用火狐的话还不会报错!此时注意,要把数据库设置为同一信息要唯一! 
原因:HTML 中 image的描述是“创建一个图像控件,该控件单击后将导致表单立即被提交”。 
2.<img alt="提交" src="xxx.gif" onclick="return dosubmit();" style="cursor:pointer;"> 
这种方式提交是正常的没有问题, 效果和上面是一样的。所以,请少用第一种方式提交数据尤其是在struts的应用中 
注意:css: cursor:hand只能被IE识别,火狐是不能识别的。而pointer则可以兼容! 
注!无论哪种方式提交都在包含在<form></form>之间,否则,提交无效

原创粉丝点击