请教struts1.2.9 html:javascript 标签 请教JSP页面上用struts1.2.9 html:javascript 标签验证用户输入信息,当错误的时候,错误信息不是弹出在javascript对话框,而是显示在页面上。 请问该如何实现啊?新手请教 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 流程:ActionForm中的validate方法,如果ActionErrors为非空,则验证失败,则立即将ActionErrors放入请求区间并转发到显示错误的信息页面响应ActionErrors: 存纳错误的集合ActionError: 错误信息的一个封装对象实例(用户登陆)1.数据库库名为"users",表名为"userinfo",列名为"userName"和"userPass"2.创建web工程"strutslogindemo",并建立struts框架3.配置struts-config.xml,同时建立Form,Action,JSP 1)***配置Form*** Form Properties分页: userCase: Form的模块名 name: Form的别名(添加userCase后会自动生成) Superclass: 选择后面为action.ActionForm Add: 添加属性(和请求页面的属性要求一致) Methods分页: 因为需要表单验证,所以各项默认(如果不需验证,则取消validate方法的勾选) JSP分页: 勾选Create JSP form,将New JSP Path改为"/login.jsp"(将login.jsp放在了服务器根目录) next 2)***配置Action*** 如果需要表单验证,勾选Validate Form,否则取消 Input Source: login.jsp的路径 3)***添加用户登陆成功和失败的页面*** struts-config.xml界面,添加成功和失败的jsp,和Form连线,并建立连接名,分别为"succ"和"fail" 4)struts-config.xml里Action标签下的子标签介绍 validate:是否需要表单验证,默认true,如果为false则立刻将Form放入某共享区间内 scope:定义Form共享区间 type:定义Action的类路径 <forward name= path= /> 定义局部转发地址(仅对当前Action有效), name属性定义逻辑地址,path定义真实地址(物理地址) 4.配置Form的表单验证方法 1)修改资源文件"ApplicationResources.properties", 往该文件里添加如下代码: login.userName.err.info=sorry,userName is null! login.userPass.err.info=sorry,userPass is null! 2)修改Form里的validate(验证方法) 代码如下: public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) { ActionErrors errors=new ActionErrors(); if(userName.equals("")){ //注意,下面的"login.userName.err.info"为资源文件的Key ActionError error=new ActionError("login.userName.err.info"); errors.add("userNameError",error); } else if(userPass.equals("")){ ActionError error=new ActionError("login.userPass.err.info"); errors.add("userPassError",error); } return errors; } 3)在login.jsp的用户名和密码文本框旁边分别加入如下代码: <html:errors property="userNameError"/><br/> <html:errors property="userPassError"/><br/> 注意:虽然MyEclipse快速开发struts框架,jsp会自动生成该代码, 但是标签里的属性名(property)和Form里往集合添加的元素的别名不一定一致 所以一定要检查是否一致 4)注意:struts-config.xml里,input属性:描述如果验证失败,显示错误信息的页面地址5.struts框架已经搭建完毕,现在搭建"数据库连接",引入数据库架包到lib, 新建"com.huayu.db"包,新建Dbconn.java (数据库连接) 代码如下: private static Connection conn=null; private static String url=null; public static Connection getConn() { try { Class.forName("com.mysql.jdbc.Driver"); url="jdbc:mysql://localhost:3306/users?useUnicode=true&characterEncoding=UTF-8"; conn=DriverManager.getConnection(url,"root",""); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } return conn; }6.新建"com.huayu.voo"包,搭建用户类"Userinfo.java (JavaBean)" (用于在Action里,从Form取出请求信息后,给用户类赋值,然后用户类对象做形参调用服务层) 代码如下: private String userName=""; private String userPass=""; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserPass() { return userPass; } public void setUserPass(String userPass) { this.userPass = userPass; } public Userinfo(String userName, String userPass) { super(); this.userName = userName; this.userPass = userPass; } public Userinfo() { super(); }7.新建"com.huayu.oper"包,搭建服务层"UserinfoOper.java (登陆验证方法)" 代码如下: public Connection conn=null; public PreparedStatement pstmt=null; public ResultSet rs=null; public String sql=""; public boolean userDengLu(Userinfo uio) { try { conn=Dbconn.getConn(); sql="SELECT userPass FROM userinfo WHERE userName=?"; pstmt=conn.prepareStatement(sql); pstmt.setString(1,uio.getUserName()); rs=pstmt.executeQuery(); if(rs.next()){ String userPass=rs.getString("userPass"); if(uio.getUserPass().equals(userPass)){ return true; } } } catch (SQLException e) { e.printStackTrace(); }finally{ try { rs.close(); pstmt.close(); conn.close(); } catch (SQLException e) { e.printStackTrace(); } } return false; }8.最后Action里嵌入代码,它取出Form里的请求信息,给用户类属性赋值,并调用service方法 代码如下: public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form; String userName=loginForm.getUserName(); String userPass=loginForm.getUserPass(); Userinfo ui=new Userinfo(); ui.setUserName(userName); ui.setUserPass(userPass); UserinfoOper uio=new UserinfoOper(); if(uio.userDengLu(ui)){ return mapping.findForward("succ"); } else return mapping.findForward("fail"); }***注意***ActionForm中的reset方法,在构造方法之后,任何方法之前被自动执行 非常感谢楼上的回复,可能是我没有表达清楚,我不是想要服务器验证的那种,而是在客户端完成验证(比如说验证用户名不能输入数字)。所以,我考虑是不是能用到html:javascript标签,但是需要把错误信息显示在页面error区域 html:script 标签可以获得message信息吗? 用个js<div style="display:none" id="showmess">用户名不能输入数字,请输入合法的字符</div>function checkusername(){if(name不合法){document.getElementById("showmess").style.display='block';}} ls的也不错!<html></body><div style="display:none" id="showmess"> 用户名不能输入数字,请输入合法的字符 </div> <SCRIPT LANGUAGE="javascript">function checkusername(){ if(判断){ document.getElementById("showmess").style.display='block'; } } </script><input type="submit" value="验证" onclick="checkusername();"></body></html> 1,LS的方法可以显示但是一闪就没了,信息不能停留在页面上。2,这样一来好像还是用不上struts的那个htmml:script吧,即使用上该如何不让他弹出alert 呢?3,我现在是想写个多画面都能用的共通机能,所以想用struts标签,请问还有其他什么好办法呢?谢谢。 <html:javascript formName="loginForm" /><SCRIPT LANGUAGE="javascript">function checkusername(form){var bol=true;bol = validateLoginForm(form);if(!bol){alert(bol); document.getElementById("showmess").style.display='block';}}</script>这是我测试用的代码,很奇怪一闪就没了。请教! validateLoginForm(form); 是struts标签自动生成的那个函数 干脆把整个JSP都贴上吧。<%@ page language="java" pageEncoding="GBK"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean"%><%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%><html><head><title>JSP for DynaValidatorForm form</title></head><body><div style="display: none" id="showmess">用户名非法。</div><html:form action="/login" onsubmit="return checkusername(this)"> uname : <html:text property="uname" /> <html:errors property="uname" /> <br /> email : <html:text property="email" /> <html:errors property="email" /> <br /> <html:submit /> <html:cancel /></html:form><html:javascript formName="loginForm" /><SCRIPT LANGUAGE="javascript">function checkusername(form){var bol=true;bol = validateLoginForm(form);if(!bol){alert(bol); document.getElementById("showmess").style.display='block';}}</script></body></html> 关于jsf项目中的editor,或者用过ck-jsf-editor的进来看看 生成组织架构树问题 谁能解译一下PSYoungGen /PSOldGen/PSPermGen区别及出现的问题? HTTP Status 500 关于JSP的声明元素的用法的疑惑,请高手门指点一下! 请问Applet中怎样获得服务器端绝对路径? 获得了一个字符串,想判断是不是一个有效的网址,如何做? ■■网页中如何把静态文本作为一个对象,改变它的显示值?■■ servlet的问题 Spring mvc welcome file 问题 jsp:include 的一个奇怪的参数问题 想问一下文本框的级联更改问题
则立即将ActionErrors放入请求区间并转发到显示错误的信息页面响应ActionErrors: 存纳错误的集合
ActionError: 错误信息的一个封装对象实例(用户登陆)1.数据库库名为"users",表名为"userinfo",列名为"userName"和"userPass"2.创建web工程"strutslogindemo",并建立struts框架3.配置struts-config.xml,同时建立Form,Action,JSP
1)***配置Form*** Form Properties分页:
userCase: Form的模块名
name: Form的别名(添加userCase后会自动生成)
Superclass: 选择后面为action.ActionForm
Add: 添加属性(和请求页面的属性要求一致) Methods分页: 因为需要表单验证,所以各项默认(如果不需验证,则取消validate方法的勾选) JSP分页: 勾选Create JSP form,将New JSP Path改为"/login.jsp"(将login.jsp放在了服务器根目录) next 2)***配置Action*** 如果需要表单验证,勾选Validate Form,否则取消
Input Source: login.jsp的路径 3)***添加用户登陆成功和失败的页面*** struts-config.xml界面,添加成功和失败的jsp,和Form连线,并建立连接名,分别为"succ"和"fail" 4)struts-config.xml里Action标签下的子标签介绍
validate:是否需要表单验证,默认true,如果为false则立刻将Form放入某共享区间内
scope:定义Form共享区间
type:定义Action的类路径
<forward name= path= /> 定义局部转发地址(仅对当前Action有效),
name属性定义逻辑地址,path定义真实地址(物理地址)
4.配置Form的表单验证方法
1)修改资源文件"ApplicationResources.properties",
往该文件里添加如下代码:
login.userName.err.info=sorry,userName is null!
login.userPass.err.info=sorry,userPass is null! 2)修改Form里的validate(验证方法)
代码如下:
public ActionErrors validate(ActionMapping mapping,HttpServletRequest request) {
ActionErrors errors=new ActionErrors();
if(userName.equals("")){
//注意,下面的"login.userName.err.info"为资源文件的Key
ActionError error=new ActionError("login.userName.err.info");
errors.add("userNameError",error);
}
else if(userPass.equals("")){
ActionError error=new ActionError("login.userPass.err.info");
errors.add("userPassError",error);
}
return errors;
} 3)在login.jsp的用户名和密码文本框旁边分别加入如下代码:
<html:errors property="userNameError"/><br/>
<html:errors property="userPassError"/><br/>
注意:虽然MyEclipse快速开发struts框架,jsp会自动生成该代码,
但是标签里的属性名(property)和Form里往集合添加的元素的别名不一定一致
所以一定要检查是否一致 4)注意:struts-config.xml里,input属性:描述如果验证失败,显示错误信息的页面地址5.struts框架已经搭建完毕,现在搭建"数据库连接",引入数据库架包到lib,
新建"com.huayu.db"包,新建Dbconn.java (数据库连接)
代码如下:
private static Connection conn=null;
private static String url=null;
public static Connection getConn()
{
try {
Class.forName("com.mysql.jdbc.Driver");
url="jdbc:mysql://localhost:3306/users?useUnicode=true&characterEncoding=UTF-8";
conn=DriverManager.getConnection(url,"root","");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}6.新建"com.huayu.voo"包,搭建用户类"Userinfo.java (JavaBean)"
(用于在Action里,从Form取出请求信息后,给用户类赋值,然后用户类对象做形参调用服务层)
代码如下:
private String userName="";
private String userPass="";
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
public Userinfo(String userName, String userPass) {
super();
this.userName = userName;
this.userPass = userPass;
}
public Userinfo() {
super();
}7.新建"com.huayu.oper"包,搭建服务层"UserinfoOper.java (登陆验证方法)"
代码如下:
public Connection conn=null;
public PreparedStatement pstmt=null;
public ResultSet rs=null;
public String sql="";
public boolean userDengLu(Userinfo uio)
{
try {
conn=Dbconn.getConn();
sql="SELECT userPass FROM userinfo WHERE userName=?";
pstmt=conn.prepareStatement(sql);
pstmt.setString(1,uio.getUserName());
rs=pstmt.executeQuery();
if(rs.next()){
String userPass=rs.getString("userPass");
if(uio.getUserPass().equals(userPass)){
return true;
}
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return false;
}8.最后Action里嵌入代码,它取出Form里的请求信息,给用户类属性赋值,并调用service方法
代码如下:
public ActionForward execute(
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;
String userName=loginForm.getUserName();
String userPass=loginForm.getUserPass();
Userinfo ui=new Userinfo();
ui.setUserName(userName);
ui.setUserPass(userPass);
UserinfoOper uio=new UserinfoOper();
if(uio.userDengLu(ui)){
return mapping.findForward("succ");
}
else
return mapping.findForward("fail");
}***注意***
ActionForm中的reset方法,在构造方法之后,任何方法之前被自动执行
所以,我考虑是不是能用到html:javascript标签,但是需要把错误信息显示在页面error区域
<div style="display:none" id="showmess">
用户名不能输入数字,请输入合法的字符
</div>
function checkusername(){
if(name不合法){
document.getElementById("showmess").style.display='block';
}}
<html>
</body>
<div style="display:none" id="showmess">
用户名不能输入数字,请输入合法的字符
</div>
<SCRIPT LANGUAGE="javascript">
function checkusername(){
if(判断){
document.getElementById("showmess").style.display='block';
}
}
</script>
<input type="submit" value="验证" onclick="checkusername();">
</body>
</html>
2,这样一来好像还是用不上struts的那个htmml:script吧,即使用上该如何不让他弹出alert 呢?
3,我现在是想写个多画面都能用的共通机能,所以想用struts标签,请问还有其他什么好办法呢?谢谢。
<SCRIPT LANGUAGE="javascript">
function checkusername(form){
var bol=true;
bol = validateLoginForm(form);if(!bol){
alert(bol);
document.getElementById("showmess").style.display='block';
}
}
</script>
这是我测试用的代码,很奇怪一闪就没了。请教!
<%@ page language="java" pageEncoding="GBK"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean"
prefix="bean"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html"
prefix="html"%><html>
<head>
<title>JSP for DynaValidatorForm form</title>
</head>
<body>
<div style="display: none" id="showmess">用户名非法。</div>
<html:form action="/login" onsubmit="return checkusername(this)"> uname : <html:text property="uname" />
<html:errors property="uname" />
<br />
email : <html:text property="email" />
<html:errors property="email" />
<br /> <html:submit />
<html:cancel />
</html:form>
<html:javascript formName="loginForm" />
<SCRIPT LANGUAGE="javascript">
function checkusername(form){
var bol=true;
bol = validateLoginForm(form);if(!bol){
alert(bol);
document.getElementById("showmess").style.display='block';
}
}
</script>
</body></html>