您的位置:首页 > 编程语言 > Java开发

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

2013-04-04 21:51 513 查看
今天做项目时,看见一个比较漂亮的登录图片,所以想试试用图片来代替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>之间,否则,提交无效
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐