您的位置:首页 > 编程语言 > Java开发

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页面的整洁和逻辑清晰。
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: