JSP页面中,根据ID获取对象的语法糖封装

需求:

经常需要在jsp页面中,根据id获取某Model的实例,用于显示其某个属性。如:人事管理系统中,大部分的页面都需要根据id获取人员信息,显示姓名、性别等不同的属性。如果都在后台取得之后,用servlet api或者mvc框架的api放到request中,过于繁琐,会造成大量的冗余代码。

解决方案:

在application中放置假map,key为id(或者其他需要频繁查询的key字段),value为根据key查询出的对象。这样,就可以在jsp页面中用el表达式访问map的语法,获取到该对象,并进一步获取其属性。

具体实现方法为:项目启动时,在application域中放置一个实现Map接口的匿名类(可采用Listener方式),只需要重写其get函数。如:

public void contextInitialized(ServletContextEvent contextEvent)
        {
                contextEvent.getServletContext().setAttribute(“modelPoolById”, new HashMap<Long, Model>()
                {
                        /**
                         *
                         */
                        private static final long serialVersionUID = 1L;

                        @Override
                        public Org get(Object key)
                        {
                               //通过Dao层访问该方法并返回
                        }

                });

……

 

在jsp页面中,可以直接使用el表达式访问:${modelPoolById[id].xxx}

如果项目需要,可以在保证访问接口不变的情况下,增加缓存等其他复杂逻辑。

比写JSP标签的方式更轻量,只封装了查询逻辑,并没有限制要显示那些字段,而是提供了一个完整的对象。并且,嵌套给其它标签使用方面也更方便。

发表评论

电子邮件地址不会被公开。 必填项已用*标注