kui(kui) 请您具体解释一下!!
解决方案 »
- 资源检索系统 jsp
- 我想学习java web编程
- 我感觉很是迷茫!
- Spring的ResourceBundleMessageSource中basename的设置问题。
- 急!急!急!Oracle CLOB 读取出错!
- 关于Context,InitialContext()的使用问题
- 怎样在dos命令地运行一个,java应用程序,这个应用程序调用已写好的ejb? 在线等?
- 推荐一本学JAVA的书
- weblogic8.1下如何调试ejb呀.
- jsp中怎么嵌套js代码?
- 谁做过jboss与IIS配合的案例啊
- weblogic8.1的数据库存取问题,ejb在oracle可以运行但为什么到了access报错!
<bean:message key="errors.header"/>
<ul>
<html:messages id="error">
<li><bean:write name="error"/></li>
</html:messages>
</ul><hr>
</logic:messagesPresent>
我看到有些例子是用 html 标签中 message 这个 bean 来做提示的 , id="error" 是不是应该在actionform 中 定义呢?? 还是在别的地方!!!! 我是个初学者!
2、在web.xml中进行参数定义
3、在actionform中进行检测的定义
4、在struts-config.xml中对actionform的action加上判断。
5、在jsp页面上加上<html:errors>
但我可以肯定的是我是在显示错误的提示信息时出现的异常!!
<logic:messagesPresent>
<bean:message key="errors.header"/>
<ul> <html:messages id="error" > //异常位置
<li><bean:write name="error"/></li>
</html:messages>
</ul><hr>
</logic:messagesPresent>
关于这个<html:errors>,它是保存在Request里的。
如果你得Request里没有errors的话,<html:errors>它是不起作用的(不显示)。还有,他跟Properties文件的位置也是有关系的。
好像是得带个包名!自己再调调吧不难的。 将“流氓无赖”测试到底
——始于2003年7月
树欲止而风不停,行云流水匆匆去;
树梢蚂蚱凭空望,江边浪花碎巨石; 支持“流金岁月”!!!
发送框,少个“右键菜单,选择粘贴”;
——2003年12月24日am^@^
——始于2003年7月
树欲止而风不停,行云流水匆匆去;
树梢蚂蚱凭空望,江边浪花碎巨石; 支持“流金岁月”!!!
发送框,少个“右键菜单,选择粘贴”;
——2003年12月24日am^@^
type="com.user.UserEditAction"
name="user_editForm"
scope="request"
input="/manage/user/user_add.jsp"
validate="true">
<forward name="success" path="/manage/user/user_add.jsp"/>
<forward name="fail" path="/err/err.jsp"/> </action>注意 : validate="true"> 要这样写
那里的判断才能进行
package com.user;import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.util.*;
import java.util.*;public class LogonForm extends ActionForm {
private String loginuserpassword = null;
private String loginusername = null;
public String getLoginuserpassword() {
return loginuserpassword;
} public void setLoginuserpassword(String loginuserpassword) {
this.loginuserpassword = loginuserpassword;
} public String getLoginusername() {
return loginusername;
} public void setLoginusername(String loginusername) {
this.loginusername = loginusername;
} public void reset(ActionMapping mapping, HttpServletRequest request) {
loginusername = null;
loginuserpassword = null;
//初始化登陆页面的option 实际应用中要做到bean中
} public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if((loginusername == null) || (loginusername.length() < 1)) {
errors.add("loginusername",
new ActionError("error.loginusername.required"));
}
if((loginuserpassword == null) || (loginuserpassword.length() < 1)) {
errors.add("loginuserpassword",
new ActionError("error.loginuserpassword.required"));
} return errors;
}
}这是我FORM里的 在这里可以进行判断啊
import javax.servlet.http.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;public class RegistrationAction extends Action
{
private Log log; public RegistrationAction()
{
log = LogFactory.getFactory().getInstance(getClass().getName());
} public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response)
throws Exception
{
HttpSession session = request.getSession();
java.util.Locale locale = getLocale(request);
org.apache.struts.util.MessageResources messages = getResources(request);
OrderCarForm info = (OrderCarForm)form; String action = request.getParameter("action");
if(isCancelled(request))
{
if(log.isInfoEnabled())
log.info(" " + mapping.getAttribute() + " - Registration transaction was cancelled");
removeFormBean(mapping, request);
return mapping.findForward("success");
}
/*
else
{
ActionErrors errors = new ActionErrors();
System.out.println("in action errorsadd !!");
errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("error"));
request.setAttribute("org.apache.struts.action.ERROR",errors) ;
saveErrors(request,errors);
//return (new ActionForward(mapping.getInput()));
System.out.println("out action errorsadd !!");
return mapping.findForward("error");
//return (new ActionForward(mapping.getInput()));
}
*/
ActionErrors errors = info.validate(mapping, request);
if(errors != null && errors.isEmpty())
{
if(info.getPage() == 1)
return mapping.findForward("input2");
if(info.getPage() == 2)
return mapping.findForward("success");
} else
{
saveErrors(request, errors);
if(info.getPage() == 1)
return mapping.findForward("input" + info.getPage());
if(info.getPage() == 2)
return mapping.findForward("input" + info.getPage());
}
return mapping.findForward("input1"); } protected void removeFormBean(ActionMapping mapping, HttpServletRequest request)
{
if(mapping.getAttribute() != null)
if("request".equals(mapping.getScope()))
{
request.removeAttribute(mapping.getAttribute());
} else
{
HttpSession session = request.getSession();
session.removeAttribute(mapping.getAttribute());
}
}}这是我的actiong 有一部分隐掉了 是我调试用的 !!
ActionErrors errors = new ActionErrors();
System.out.println("in action errorsadd !!");
errors.add(ActionErrors.GLOBAL_ERROR,new ActionError("error.login.failed"));
saveErrors(request,errors);
return (new ActionForward(mapping.getInput()));
二是ActionForm中validate效验:
public ActionErrors validate(ActionMapping actionMapping, HttpServletRequest httpServletRequest)
{
/**@todo: finish this method, this is just the skeleton.*/
ActionErrors errors = new ActionErrors();
errors.add("username", new ActionError("username.errors"));
return errors;
}三是定义Bean一个出错消息属性:
ublic String getErrormessage()
{
return errormessage;
}
public void setErrormessage(String errormessage) {
this.errormessage = errormessage;
}前两个出错处理的本质是一样的,都是通过ActionServlet把错信息转发到输入页面中:其中validate效验是在表单提交到ActionServlet中调用Action前由ActionServlet调用处理的,当validate返回的错误数不为0时,在列出错误键名的Request属性中保存这个实例,并不再调用Action而是直接转发到输入页面中,如果在输入页面中有<html:errors/>标签,将显示出错信息。Action中的出错处理也是同样的道理,由ActionServlet把出错信息转发到输入页面中。要注意的是转发的是输入页面而不是输出页面,如果转发到输出页面,如果是saveErrors函数用request值,将得不到出错信息。
前两个出错处理不同的是前者要用saveErrors(request,errors)保存出错消息,后者由ActionServlet自动完成。
另外一个是楼主在Bean中自己定义了一个errormessage属性,采用通常的显示Bean属性的方法显示就行了,但是楼主如下代码:
OrderCarForm form = new OrderCarForm();
form.setErrormessage("用户名称不可以为空!");
这样不行的,不要用新的对象,直接用setErrormessage("用户名称不可以为空!");就行了。前两者楼主的代码没有错误,主要代码我调试了一次,能正常显示出错消息,如果用<html:errors/>标签不显示出错消息,那只有一种可能,就是在shopbag\ApplicationResources.properties文件没定义键值username.errors(注意文件路径shopbag\)。要注意的是new ActionError("username.errors")是提取properties文件中的username.errors的值,而不是生意定义一个新的username.errors值。对于下述代码:
<logic:messagesPresent>
<bean:message key="errors.header"/>
<ul> <html:messages id="error" >
<li><bean:write name="error"/></li>
</html:messages>
</ul><hr>
</logic:messagesPresent>
我调试没能过, 建议用<html:errors/>标签行了。
这段程序已经调试好了,问题的确是在 对errors 引用上 马上结贴 ! 我想请教一下 : 我感觉对于数据的验证 在server端上执行 无论是安全性还是这对执行效率 都应该很优化 ! 但是对于复杂的处理,如果都放到actionform 里去执行 ??!! 这合理么? 您在大中型项目中是怎么组织结构的呢 ?? 还有,如果结合ejb 对于那些复杂逻辑处理怎么样才可以合理的调用呢 ? 感谢各位的参与和帮助 !! 以后希望我们共同进步!