栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我应该在Struts2视图层中检索数据库记录吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我应该在Struts2视图层中检索数据库记录吗?

使用Struts2,您将不再需要使用

scriptlets
<% stuff %>
)。
它们陈旧,糟糕,它们是在视图页面中注入的业务逻辑,请不要使用
它们。您也不需要JSTL,只需使用Struts2标签就可以实现
任何结果。

为了更好地分离和分离代码和概念,您应该具有:

  1. DAO Layer
    :仅执行简单的查询;
  2. BUSINESS Layer
    :它通过公开DAO层结果Service,聚合多个DAO调用并在需要时执行多个业务操作;
  3. PRESENTATION Layer
    :在Struts2中充当模型的动作;在这里,您从业务层调用服务,以检索JSP所需的对象;
  4. JSP (VIEW Layer)
    :在JSP包含普通的HTML,并访问内容的操作通过的访问者(吸气剂)所需的数据,并最终从所述值栈(任何其他必要的元件
    #session
    #request
    等等)。

在您的示例中,所有这些

>     <%>        Session session2 => HibernateUtil.getSessionFactory().getCurrentSession();>        Transaction tx = session2.beginTransaction();>        Query q = session2.createQuery("from Subject");>        List subjectList = q.list();>        List levelList = session2.createQuery("from Level").list();>     %>

应该位于DAO /业务层中,

getSubjectList()
;并通过和两种功能公开
getLevelList()
;。然后,在您的操作中,您应该具有以下内容

public class YourAction {    private List<Object> levelList; // private    private List<Object> subjectList; // private    public String execute() throws Exception {   // Call the service, load data        levelList = getMyService().getLevelList();        subjectList = getMyService().getSubjectList();        // Forwarding to the JSP        return SUCCESS;    }    public List<Object> getLevelList() {        return levelList;    }    public List<Object> getSubjectList() {        return subjectList;    }}

and in your JSP, instead of:

>     <select name="subject_id">>     <%>       for (Object subjectObject : subjectList) {>subject subject = (Subject) subjectObject;>     %>><option> value="<%=subject.getId()%>"><%=subject.getName()%></option>>     <%>       } //end for>     %>>     </select>

您可以像这样访问列表(丑陋的HTML / Struts2混合方式):

    <select name="subject_id">        <s:iterator value="subjectList"> <option value="<s:property value="id"/>">     <s:property value="name"/> </option></s:iterator>    </select>

如果是Select,则使用适当的Struts2 UI Select标签:

    <s:select name = "subject_id"    list = "subjectList" listKey = "id"          listValue = "name" />

如果一开始很难将所有层分开,则将操作中的前三个级别展平,只是为了了解如何分离Java(操作)和Struts2 UI标签(JSP)。理解后,您可以将DAO逻辑移至业务层,最好移至EJB。完成后,再以更大的粒度拆分…

该操作将类似于以下内容:

public class YourAction {    private List<Object> levelList; // private    private List<Object> subjectList; // private    public String execute() throws Exception {       Session session2 = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction tx = session2.beginTransaction(); Query q = session2.createQuery("from Subject"); subjectList = q.list(); levelList = session2.createQuery("from Level").list();        // Forwarding to the JSP return SUCCESS;    }    public List<Object> getLevelList() {        return levelList;    }    public List<Object> getSubjectList() {        return subjectList;    }    }

关于多次加载列表的问题,如果列表固定(例如,每月更改一次),则可以使用缓存(最好使用计时器),或者每次加载时都没有问题那。请注意,如果验证失败,ValidationInterceptor会将请求转发到映射到INPUT类型结果中的JSP,而无需到达execute()方法,因此您应从Action实现Preparable接口并将装入的东西放入

prepare()
方法中,每次执行由
PrepareInterceptor

public class YourAction implements Preparable {    private List<Object> levelList; // private    private List<Object> subjectList; // private    public void prepare() throws Exception {        // Call the service, load data,         // every time even if validation fails        levelList = getMyService().getLevelList();        subjectList = getMyService().getSubjectList();    }    public String execute() throws Exception {        // Forwarding to the JSP        return SUCCESS;    }    public List<Object> getLevelList() {        return levelList;    }    public List<Object> getSubjectList() {        return subjectList;    }}

循序渐进,该框架既简单又强大,网络上有很多示例



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418558.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号