struts2表单验证_错误信息的显示问题

时间:2022-12-09 20:44:17

//一个jsp(没有用任何struts2标签,为什么不用,实在无奈,struts2的标签太难看了,用freemarker?写自己的
//theme?目前还不太熟练,用<s:textfield>标签,form的theme设置为默认的xhtml可以轻松显示的,
//错误信息的显示也不是很难,关键是取到内容就行了,我就不知道那内容放哪去了
public class RegisterAction extends ActionSupport {
private String username;//在返回的jsp页面中用什么将它取出来?
private String userpassword;//在返回的jsp页面中用什么将它取出来?
/**
 * 这里是添加自己额外的验证机制
 */
public void validate() {
      //这一点不懂!,到底这错误信息放哪里去了?我在普通jsp里(没用struts2标签)怎么样才能取它出来
      this.addFieldError("username","用户名不存在!");
      this.addFieldError("userpassword","密码不正确!");
      
 }
 public String execute(){
    return SUCCESS;
 }

29 个解决方案

#1


大哥,你的username和password的setXXX()和getXXX()方法呢?不写怎么可能取到啊?
Struts2你可以用验证框架啊!使用simple主题的时候,在页面上写<s:fieldError>标签就可以输出校验错误的信息了啊!
Struts2的东西都在其值栈(ValueStack)对象中,你不用它的标签?简直是笑话啊!

#2


即使不用验证框架,你的addFieldError方法也是可以用<s:fieldError name="user.name"/>取出对象的错误信息的啊!Struts2的xhtml和ajax主题是不太好看!你可以使用全局配置将整个应用都改成theme="simple"的哦!它的标签你就可以自己布局了啊!不过还是建议你学学Freemarker模板语言,很简单的哦!

#3


to:andrew830314
非常感谢你的回答。

你的username和password的setXXX()和getXXX()方法呢?不写怎么可能取到啊? 
==============================================
恩,忘了写了,应该是要有的,否则在action 中就取不到了,我面临的问题的在返回的页面中,怎么取到错误信息
因为我用的是普通jsp,没有用任何struts2标签,用theme=simple确实可以更好的布局,但它的样式是struts定了的,确实
不好看,而且用textfield生成那堆tr td够那个的了,

你的addFieldError方法也是可以用 <s:fieldError   name="user.name"/> 取出对象的错误信息的啊!
========================================
有待验证,好像有会将全部的错误信息都放上去的问题
<s:fieldError   name="username"/> 结果是将username,userpassword的错误信息都显示出来了
可能是我写错了什么地方吧

Struts2的东西都在其值栈(ValueStack)对象中,你不用它的标签?简直是笑话啊!
========================================================
既然是返回jsp的,request session application我想错误信息肯定就在这里面的吧,只不过我不知道在哪个里面
以哪个名字存放的

#4


  在群里一位朋友的友情帮助下,问题解决了,确实是放在其值栈(ValueStack)对象中的,而ValueStack就是
放在request中的,这样,我们只要知道了它存放的路径,就可以直接在jsp里从request对象取出来,不需要任何struts2标签就可以显示错误信息了,这样临时解决了struts2显示的错误信息位置不好排版,样式难看等问题.想放哪就放哪了

#5


忍不住说一下
<s:fielderror>
<s:param>username</s:param>
</s:fielderror>
这种写法才只显示username的错误
虽然已经结贴,但还是写出来让后人参考

#6


楼上的代码 可以显示单条错误信息 可是这样 前面的错误信息都加了 圆点 显示的时候把原来的表格撑打了 

#7


能告诉我 怎么把 错误信息前面的圆点 去掉吗?

#8


引用 5 楼 feigme 的回复:
忍不住说一下 
<s:fielderror> 
<s:param>username </s:param> 
</s:fielderror> 
这种写法才只显示username的错误 
虽然已经结贴,但还是写出来让后人参考


精神可嘉,值得推赞.

#9


请问大家如何定义 fielderror 回显得错误信息,它把表格撑得很大。谢谢,请一定指点

#10


NND
花了一天, 最后还是用样式控制来解决这个问题
可以在CSS中定义
.formFieldError {
font-family: verdana, arial, helvetica, sans-serif;
font-size: 12px;
color: #FF3300;
vertical-align: bottom;
}

.formFieldError ul{
    margin: 0px;
    padding: 3px;
    vertical-align: middle;
}
而后使用类似用
<td class="formFieldError"><s:fielderror><s:param value="%{'userRecord.lastname'}"/></s:fielderror></td>
就可以解决样式不正的问题


上面说的"直接在jsp里从request对象取出来,不需要任何struts2标签就可以显示错误信息"
指的是怎样做来着, Google半天也没找着

#11


struts2 有bug, 指定theme="simple"根本无效果

#12


其实是放在集合中的,用的时候再从集合中取出来就是了,Action级别的是放再ArrayList中的,而Field级别是放在一个Map中的,Map中是键值对,键就是你所起的名字,值是是一个ArrayList,所以有时候一个名字可以取到若干个错误消息。

#13


引用 10 楼 starwar2030 的回复:
NND 
花了一天, 最后还是用样式控制来解决这个问题 
可以在CSS中定义 
.formFieldError { 
font-family: verdana, arial, helvetica, sans-serif; 
font-size: 12px; 
color: #FF3300; 
vertical-align: bottom; 


.formFieldError ul{ 
    margin: 0px; 
    padding: 3px; 
    vertical-align: middle; 

而后使用类似用 
<td class="formFieldError"> <s:fielderror> <s:param value="%{'userRecord.…


不需要那么复杂的,你将struts-core*中的template解出来,然后你把它放到项目的WEB-INF下,在struts.properties中添加代码
struts.ui.theme=simple
struts.ui.templateDir=WEB-INF/template
然后修改下simple下的fielderror.ftl文件,将该文件中的<li>和 </li>删除;

或者完全拷贝simple的内容定义一个自己的UI;
比如将simple拷贝一份命名为default,同样修改fielderror.ftl,在新建一个文件为theme.properties,添加内容parent = simple

再修改struts.properties的struts.ui.theme=default;这样每个文件的theme就不要指定了

#14


建议需要定义样式的同志看下自定义theme 这章的内容
还有 theme="simple" 是放在form标签内的

#15


学习,做个标记

#16


引用 4 楼 dyw31415926 的回复:
  在群里一位朋友的友情帮助下,问题解决了,确实是放在其值栈(ValueStack)对象中的,而ValueStack就是 
放在request中的,这样,我们只要知道了它存放的路径,就可以直接在jsp里从request对象取出来,不需要任何struts2标签就可以显示错误信息了,这样临时解决了struts2显示的错误信息位置不好排版,样式难看等问题.想放哪就放哪了 

在request怎么取出来呀楼主具体说下啊.

#17


<s:property value="fielderrors["username"][0]"/>

#18


ValueStack vs=(ValueStack)request.getAttribute("struts.valueStack");
String name=(String)vs.findValue("Action中的任何變量");

#19


其实可以这样取得fielderror中的错误信息:
   ${FieldErrors.name[0]} 其中name为你对应的字段

#20


 不错,做个记号。

#21


学习了,标记一下

#22


学习到了```谢谢

#23


学习了

#24


<s:property value=" #{FieldErrors.name[0]} "/>
name对应的字段。

#25


为什么不谢些好代码出来呢?

#26


引用 19 楼 yanliping1107 的回复:
其实可以这样取得fielderror中的错误信息:
  ${FieldErrors.name[0]} 其中name为你对应的字段

谢谢这位仁兄,这个答案就是我想要的,谢谢了!!

#27


感谢楼主的提醒。

#28


引用 24 楼  的回复:
<s:property value=" #{FieldErrors.name[0]} "/>
name对应的字段。

我是用%取出来的

#29


mark,兴许以后能用。

#1


大哥,你的username和password的setXXX()和getXXX()方法呢?不写怎么可能取到啊?
Struts2你可以用验证框架啊!使用simple主题的时候,在页面上写<s:fieldError>标签就可以输出校验错误的信息了啊!
Struts2的东西都在其值栈(ValueStack)对象中,你不用它的标签?简直是笑话啊!

#2


即使不用验证框架,你的addFieldError方法也是可以用<s:fieldError name="user.name"/>取出对象的错误信息的啊!Struts2的xhtml和ajax主题是不太好看!你可以使用全局配置将整个应用都改成theme="simple"的哦!它的标签你就可以自己布局了啊!不过还是建议你学学Freemarker模板语言,很简单的哦!

#3


to:andrew830314
非常感谢你的回答。

你的username和password的setXXX()和getXXX()方法呢?不写怎么可能取到啊? 
==============================================
恩,忘了写了,应该是要有的,否则在action 中就取不到了,我面临的问题的在返回的页面中,怎么取到错误信息
因为我用的是普通jsp,没有用任何struts2标签,用theme=simple确实可以更好的布局,但它的样式是struts定了的,确实
不好看,而且用textfield生成那堆tr td够那个的了,

你的addFieldError方法也是可以用 <s:fieldError   name="user.name"/> 取出对象的错误信息的啊!
========================================
有待验证,好像有会将全部的错误信息都放上去的问题
<s:fieldError   name="username"/> 结果是将username,userpassword的错误信息都显示出来了
可能是我写错了什么地方吧

Struts2的东西都在其值栈(ValueStack)对象中,你不用它的标签?简直是笑话啊!
========================================================
既然是返回jsp的,request session application我想错误信息肯定就在这里面的吧,只不过我不知道在哪个里面
以哪个名字存放的

#4


  在群里一位朋友的友情帮助下,问题解决了,确实是放在其值栈(ValueStack)对象中的,而ValueStack就是
放在request中的,这样,我们只要知道了它存放的路径,就可以直接在jsp里从request对象取出来,不需要任何struts2标签就可以显示错误信息了,这样临时解决了struts2显示的错误信息位置不好排版,样式难看等问题.想放哪就放哪了

#5


忍不住说一下
<s:fielderror>
<s:param>username</s:param>
</s:fielderror>
这种写法才只显示username的错误
虽然已经结贴,但还是写出来让后人参考

#6


楼上的代码 可以显示单条错误信息 可是这样 前面的错误信息都加了 圆点 显示的时候把原来的表格撑打了 

#7


能告诉我 怎么把 错误信息前面的圆点 去掉吗?

#8


引用 5 楼 feigme 的回复:
忍不住说一下 
<s:fielderror> 
<s:param>username </s:param> 
</s:fielderror> 
这种写法才只显示username的错误 
虽然已经结贴,但还是写出来让后人参考


精神可嘉,值得推赞.

#9


请问大家如何定义 fielderror 回显得错误信息,它把表格撑得很大。谢谢,请一定指点

#10


NND
花了一天, 最后还是用样式控制来解决这个问题
可以在CSS中定义
.formFieldError {
font-family: verdana, arial, helvetica, sans-serif;
font-size: 12px;
color: #FF3300;
vertical-align: bottom;
}

.formFieldError ul{
    margin: 0px;
    padding: 3px;
    vertical-align: middle;
}
而后使用类似用
<td class="formFieldError"><s:fielderror><s:param value="%{'userRecord.lastname'}"/></s:fielderror></td>
就可以解决样式不正的问题


上面说的"直接在jsp里从request对象取出来,不需要任何struts2标签就可以显示错误信息"
指的是怎样做来着, Google半天也没找着

#11


struts2 有bug, 指定theme="simple"根本无效果

#12


其实是放在集合中的,用的时候再从集合中取出来就是了,Action级别的是放再ArrayList中的,而Field级别是放在一个Map中的,Map中是键值对,键就是你所起的名字,值是是一个ArrayList,所以有时候一个名字可以取到若干个错误消息。

#13


引用 10 楼 starwar2030 的回复:
NND 
花了一天, 最后还是用样式控制来解决这个问题 
可以在CSS中定义 
.formFieldError { 
font-family: verdana, arial, helvetica, sans-serif; 
font-size: 12px; 
color: #FF3300; 
vertical-align: bottom; 


.formFieldError ul{ 
    margin: 0px; 
    padding: 3px; 
    vertical-align: middle; 

而后使用类似用 
<td class="formFieldError"> <s:fielderror> <s:param value="%{'userRecord.…


不需要那么复杂的,你将struts-core*中的template解出来,然后你把它放到项目的WEB-INF下,在struts.properties中添加代码
struts.ui.theme=simple
struts.ui.templateDir=WEB-INF/template
然后修改下simple下的fielderror.ftl文件,将该文件中的<li>和 </li>删除;

或者完全拷贝simple的内容定义一个自己的UI;
比如将simple拷贝一份命名为default,同样修改fielderror.ftl,在新建一个文件为theme.properties,添加内容parent = simple

再修改struts.properties的struts.ui.theme=default;这样每个文件的theme就不要指定了

#14


建议需要定义样式的同志看下自定义theme 这章的内容
还有 theme="simple" 是放在form标签内的

#15


学习,做个标记

#16


引用 4 楼 dyw31415926 的回复:
  在群里一位朋友的友情帮助下,问题解决了,确实是放在其值栈(ValueStack)对象中的,而ValueStack就是 
放在request中的,这样,我们只要知道了它存放的路径,就可以直接在jsp里从request对象取出来,不需要任何struts2标签就可以显示错误信息了,这样临时解决了struts2显示的错误信息位置不好排版,样式难看等问题.想放哪就放哪了 

在request怎么取出来呀楼主具体说下啊.

#17


<s:property value="fielderrors["username"][0]"/>

#18


ValueStack vs=(ValueStack)request.getAttribute("struts.valueStack");
String name=(String)vs.findValue("Action中的任何變量");

#19


其实可以这样取得fielderror中的错误信息:
   ${FieldErrors.name[0]} 其中name为你对应的字段

#20


 不错,做个记号。

#21


学习了,标记一下

#22


学习到了```谢谢

#23


学习了

#24


<s:property value=" #{FieldErrors.name[0]} "/>
name对应的字段。

#25


为什么不谢些好代码出来呢?

#26


引用 19 楼 yanliping1107 的回复:
其实可以这样取得fielderror中的错误信息:
  ${FieldErrors.name[0]} 其中name为你对应的字段

谢谢这位仁兄,这个答案就是我想要的,谢谢了!!

#27


感谢楼主的提醒。

#28


引用 24 楼  的回复:
<s:property value=" #{FieldErrors.name[0]} "/>
name对应的字段。

我是用%取出来的

#29


mark,兴许以后能用。