怎样才能将校验错误的结果从input上面移到右面?login.jsp<%@ page contentType="text/html; charset=GBK"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>用户登陆1</title>
<s:head/>
</head>
<body>
<s:actionerror/>
<s:form action="Login" theme = "ajax" validate="true">
         <h3>用户登录</h3>
           <s:textfield name="id" label="用户名" />
           <s:password name="pin" label="密码" />
             <s:submit value="登录" />
     </s:form>
</body>
</html>
LoginAction-validation.xml<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"><validators>
<field name="id">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>用户名不为空</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\d{4})]]></param>
<message>您输入的用户名只能是4位数字</message>
</field-validator>
</field>
<field name="pin">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>密码不为空</message>
</field-validator>
<field-validator type="regex">
<param name="expression"><![CDATA[(\w{6,12})]]></param>
<message>密码为6-12位</message>
</field-validator>
</field>
</validators>struts.xml<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.i18n.encoding" value="GBK"/>
    <package name="longyuan" extends="struts-default">
        <action name="Login" class="longyuan.action.LoginAction">
            <result name="input">/login.jsp</result>
            <result name="error">/login.jsp</result>
            <result name="success">/welcome.jsp</result>        
        </action>
    </package>
</struts>ps:上网查过很多版本,如改struts2的template,结果当焦点移出文本框时错误信息仍显示在文本框上面,但点击登录后错误信息同时显示在文本框上面和右边。不知为什么?校验时是哪个js往页面输出信息呢?谢谢

解决方案 »

  1.   

    我也有这样的想法,放上边的确不好看,自己写主题的确费劲。看看别人怎么想的吧!<s:form action=这个翻译后是嵌套table形式,你可以改成<table>
    form------------------------------------------------
     <tr>
     <td>lable </td>input<td></td><td>错误显示区</td>
    <tr>
      

  2.   

    <s:form action="Login" theme = "ajax" validate="true" theme="simple" >
                    <h3>用户登录</h3>
                     <span> <s:textfield name="id" label="用户名" /> <s:actionerror/></span>
                      <s:password name="pin" label="密码" />
                        <s:submit value="登录" />
            </s:form>
      

  3.   

    干嘛非得用<s:actionerror/>标签呢,你可以直接从valueStack上取啊。用property标签,<s:property value="actionErrors[0]"/>,爱放哪儿就放哪儿。UI标签都是模板渲染过的,有一些html内容可能并不是你想要的,不好控制,我从来都不用。
      

  4.   

    为什么会有两个theme呢?如果不使用theme = "ajax"而用theme="simple"的话,上面那样写会有问题吧……
      

  5.   

    那个<s:actionerror/>不是用来显示ajax校验的,那句是提交后台产生错误时的输出……
    我一直没弄明白ajax的validation校验是通过什么方式往jsp页面写东西的,是template下的xhtml/validation.js还是其他什么的……