struts1(9)----处理业务逻辑信息回显

            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页面的整洁和逻辑清晰。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值