struts1(9)----处理业务逻辑信息回显
2014-03-14 13:10
253 查看
Struts数据回显在jsp页面上,除了前期的formbean属性校验,在分发到action后,action会调用业务层的逻辑,根据提交的数据进行处理,此时处理也会一些信息需要回显,如提交的数据有问题,或者业务操作成功等,这些信息也需要回显到jsp页面。简单的话,有三种方式进行回显:
第一种方式,利用传统servlet+el表达式进行回显。由于action的execute方法带有request对象,可以根据业务层的处理结果想request域中增加一个属性,此属性记录业务层处理的结果信息。同时在jsp页面可以直接通过el表达式取出此业务的回显信息。示例如下:
public ActionForwardexecute(ActionMapping mapping, ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {
//TODO Auto-generated method stub
EncodeFormef = (EncodeForm)form;
//逻辑业务信息回显
Stringusername = ef.getName();
BusinessServiceservice = new BusinessService();
if(service.isUserExist(username)){
//回显方式一,在request域中增加一个message属性,存入回显信息
//jsp页面通过el表达式${message}来回显错误信息
request.setAttribute("message","对不起,用户已存在");
}else{
request.setAttribute("message","注册成功");
}
//调转到注册页面
returnmapping.getInputForward();}
对应的jsp页面如下:
<html:formaction="/encode">
用户名:<html:text property="name" />
<html:errorsproperty="name"/>${message }<br />
emails:<html:textproperty="emails"/>
<html:errorsproperty="emails"/><br />
生日: <html:text property="date" />
<html:errorsproperty="date"/><br />
性别: <html:radio property="gender"value="male"/>男
<html:radioproperty="gender" value="female"/>女
<html:errorsproperty="gender"/><br />
<html:submitvalue="提交"/>
</html:form>
方法一就没有用到struts错误回显,其实可以讲所有回显信息让<html:errors>进行回显,通过查看源码知道,html:errors其实是从scope指定的域中获取属性org.apache.struts.action.ERROR的值,因此可以在action中将业务层处理结果信息以这个属性值存入到相关域中(如:request域)。这样,jsp页面就不需要通过额外的el表达式来获取业务层的处理回显信息。所有回显信息统一有<html:errors>来回显,这样jsp页面就比较干净,逻辑清晰。下面是方法二的相关代码:
public ActionForwardexecute(ActionMapping mapping, ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {
//TODO Auto-generated method stub
EncodeFormef = (EncodeForm)form;
//逻辑业务信息回显
Stringusername = ef.getName();
BusinessServiceservice = new BusinessService();
if(service.isUserExist(username)){
//方法二:上面的方法还要在jsp页面通过el表达式才能获取到相关信息,不太优雅,下面
//这个方法是通过html:errors标签来显示,这样显示内容就交给struts来完成了,不需要额外
//其它代码,
ActionErrorsae = new ActionErrors();
ae.add("name",new ActionMessage("对不起,用户已经存在了",false));
request.setAttribute(Globals.ERROR_KEY,ae);
}else{
}
//调转到注册页面
returnmapping.getInputForward();
}
对应jsp页面
<html:form action="/encode">
用户名:<html:text property="name" />
<html:errorsproperty="name"/><br />
emails:<html:textproperty="emails"/>
<html:errorsproperty="emails"/><br />
生日: <html:text property="date" />
<html:errorsproperty="date"/><br />
性别: <html:radio property="gender"value="male"/>男
<html:radioproperty="gender" value="female"/>女
<html:errorsproperty="gender"/><br />
<html:submitvalue="提交"/>
</html:form>
同样,方法二要求开发者了解<html:errors>是如何取数据的,及如何存数据的。要是开发者不知道errors需要从那个属性中获取数据,那么使用方法二将是一个困难。struts为止封装了一个方法:
protected voidsaveErrors(HttpServletRequest request, ActionMessages errors)
开发者只需要通过调用此方法,将封装了回显信息的errors对象存入到reqeust域中,即可。它的底层实现就是将这个错误信息存入到上面的Globals.ERROR_Key中。
方法三的action中的代码:
@Override
publicActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {
//TODO Auto-generated method stub
EncodeFormef = (EncodeForm)form;
//逻辑业务信息回显
Stringusername = ef.getName();
BusinessServiceservice = new BusinessService();
if(service.isUserExist(username)){
ActionErrors ae = newActionErrors();
ae.add("name",new ActionMessage("对不起,用户已经存在了",false));
//struts提供了一个方法,可以直接把错误信息填到Globals.ERROR_KEY中,这样开发者并不需要
//知道如何将错误信息添加到哪里,html:errors才可以获取错误信息。
saveErrors(request,ae);
}else{
}
//调转到注册页面
returnmapping.getInputForward();
}
}
这样通过方式三,利用struts可以实现逻辑业务数据回显。整体上保持了jsp页面的整洁和逻辑清晰。
第一种方式,利用传统servlet+el表达式进行回显。由于action的execute方法带有request对象,可以根据业务层的处理结果想request域中增加一个属性,此属性记录业务层处理的结果信息。同时在jsp页面可以直接通过el表达式取出此业务的回显信息。示例如下:
public ActionForwardexecute(ActionMapping mapping, ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {
//TODO Auto-generated method stub
EncodeFormef = (EncodeForm)form;
//逻辑业务信息回显
Stringusername = ef.getName();
BusinessServiceservice = new BusinessService();
if(service.isUserExist(username)){
//回显方式一,在request域中增加一个message属性,存入回显信息
//jsp页面通过el表达式${message}来回显错误信息
request.setAttribute("message","对不起,用户已存在");
}else{
request.setAttribute("message","注册成功");
}
//调转到注册页面
returnmapping.getInputForward();}
对应的jsp页面如下:
<html:formaction="/encode">
用户名:<html:text property="name" />
<html:errorsproperty="name"/>${message }<br />
emails:<html:textproperty="emails"/>
<html:errorsproperty="emails"/><br />
生日: <html:text property="date" />
<html:errorsproperty="date"/><br />
性别: <html:radio property="gender"value="male"/>男
<html:radioproperty="gender" value="female"/>女
<html:errorsproperty="gender"/><br />
<html:submitvalue="提交"/>
</html:form>
方法一就没有用到struts错误回显,其实可以讲所有回显信息让<html:errors>进行回显,通过查看源码知道,html:errors其实是从scope指定的域中获取属性org.apache.struts.action.ERROR的值,因此可以在action中将业务层处理结果信息以这个属性值存入到相关域中(如:request域)。这样,jsp页面就不需要通过额外的el表达式来获取业务层的处理回显信息。所有回显信息统一有<html:errors>来回显,这样jsp页面就比较干净,逻辑清晰。下面是方法二的相关代码:
public ActionForwardexecute(ActionMapping mapping, ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {
//TODO Auto-generated method stub
EncodeFormef = (EncodeForm)form;
//逻辑业务信息回显
Stringusername = ef.getName();
BusinessServiceservice = new BusinessService();
if(service.isUserExist(username)){
//方法二:上面的方法还要在jsp页面通过el表达式才能获取到相关信息,不太优雅,下面
//这个方法是通过html:errors标签来显示,这样显示内容就交给struts来完成了,不需要额外
//其它代码,
ActionErrorsae = new ActionErrors();
ae.add("name",new ActionMessage("对不起,用户已经存在了",false));
request.setAttribute(Globals.ERROR_KEY,ae);
}else{
}
//调转到注册页面
returnmapping.getInputForward();
}
对应jsp页面
<html:form action="/encode">
用户名:<html:text property="name" />
<html:errorsproperty="name"/><br />
emails:<html:textproperty="emails"/>
<html:errorsproperty="emails"/><br />
生日: <html:text property="date" />
<html:errorsproperty="date"/><br />
性别: <html:radio property="gender"value="male"/>男
<html:radioproperty="gender" value="female"/>女
<html:errorsproperty="gender"/><br />
<html:submitvalue="提交"/>
</html:form>
同样,方法二要求开发者了解<html:errors>是如何取数据的,及如何存数据的。要是开发者不知道errors需要从那个属性中获取数据,那么使用方法二将是一个困难。struts为止封装了一个方法:
protected voidsaveErrors(HttpServletRequest request, ActionMessages errors)
开发者只需要通过调用此方法,将封装了回显信息的errors对象存入到reqeust域中,即可。它的底层实现就是将这个错误信息存入到上面的Globals.ERROR_Key中。
方法三的action中的代码:
@Override
publicActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequestrequest, HttpServletResponse response)
throwsException {
//TODO Auto-generated method stub
EncodeFormef = (EncodeForm)form;
//逻辑业务信息回显
Stringusername = ef.getName();
BusinessServiceservice = new BusinessService();
if(service.isUserExist(username)){
ActionErrors ae = newActionErrors();
ae.add("name",new ActionMessage("对不起,用户已经存在了",false));
//struts提供了一个方法,可以直接把错误信息填到Globals.ERROR_KEY中,这样开发者并不需要
//知道如何将错误信息添加到哪里,html:errors才可以获取错误信息。
saveErrors(request,ae);
}else{
}
//调转到注册页面
returnmapping.getInputForward();
}
}
这样通过方式三,利用struts可以实现逻辑业务数据回显。整体上保持了jsp页面的整洁和逻辑清晰。
相关文章推荐
- 策略型业务逻辑处理选择
- 一步一步实现web程序信息管理系统之三----登陆业务逻辑实现(验证码功能+参数获取)
- 业务逻辑处理
- 关于一些业务逻辑的处理技巧
- Go Programming Blueprints 读书笔记(谈到了nsq/mgo处理数据持久化,可是业务逻辑不够复杂)
- 使用@RestController,@ExceptionHandler和@Valid,把检验和异常处理从主要业务逻辑里面抽离出来
- 使用Begin,End模拟加锁处理业务逻辑
- 网页抓取,模拟登陆,抓取动态网页内容等过程中,所涉及的Headers信息,Cookie信息,POST数据的处理逻辑
- 用适配器模式处理复杂的UITableView中cell的业务逻辑
- js原生设计模式——13桥接模式(相同业务逻辑抽象化处理的职责链模式)
- 【网络编程】用有限状态机来处理业务逻辑
- 利用java filter 实现业务异常拦截 异常信息集中处理
- [一步一步MVC]第二回:还是ActionFilter,实现对业务逻辑的统一Authorize处理
- 【Moqui业务逻辑翻译系列】--UBPL Introduction同意的商业处理文库介绍
- php中,控制器如何调用模型来处理业务逻辑?
- 策略型业务逻辑处理选择
- Markup之美,初学者应该处理好UI与业务逻辑间的关系
- 单击事件的处理方式及注册窗体的创建之(二)登录业务逻辑的实现
- 审核对应的业务逻辑处理
- 轻量级业务逻辑处理框架