Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用struts和hibernate在jsp页面上显示从数据库获取的数据_Hibernate_Struts_Struts 1 - Fatal编程技术网

如何使用struts和hibernate在jsp页面上显示从数据库获取的数据

如何使用struts和hibernate在jsp页面上显示从数据库获取的数据,hibernate,struts,struts-1,Hibernate,Struts,Struts 1,我试图使用Hibernate和struts 2将数据从数据库显示到Jsp页面。虽然没有错误,但没有显示任何内容。我试图从其他帖子中找到解决方案,但未能找到。 这是动作课 public class ListeActeurAction extends Action{ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletRes

我试图使用Hibernate和struts 2将数据从数据库显示到Jsp页面。虽然没有错误,但没有显示任何内容。我试图从其他帖子中找到解决方案,但未能找到。 这是动作课

 public class ListeActeurAction  extends Action{

public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest req, HttpServletResponse res) throws Exception {
    System.out.println("Action");

    ListeActeur ListeActeur= (ListeActeur) form;
            String query = "select nomActeur from Acteur " ;
            ListeActeur.setLis( HibernateUtil.ListeActeur(query, req)); 
    req.setAttribute("ListeActeur", ListeActeur.getLis()) ;
                    return mapping.findForward("s");
方法:HibernateUtil.ListeActeur(查询,请求)

公共静态列表ListActeur(字符串查询,HttpServletRequest请求){
系统输出打印(“hutil”);
会话会话=HibernateUtil.getSessionFactory().getCurrentSession();
session.beginTransaction();
迭代器结果=session.createSQLQuery(query.list().Iterator();
列表=新的ArrayList();
而((results.hasNext()))
{
Acteur gg=新Acteur();
//对象[]行=(对象[])结果。下一步();
//gg.setActeurId((整数)行[0]);
setNomActeur((java.lang.String)results.next());
列表。添加(gg);
}
请求getSession(true).setAttribute(“ListActeur”,列表);
session.getTransaction().commit();
HibernateUtil.getSessionFactory().close();
退货清单;
}


名义行为人:
地址IP:
struts配置



我不明白我做错了什么,请帮忙。谢谢

您三次使用相同的属性名称:

<form-bean name="ListeActeur" type="mesForms.strust.ListeActeur"/>
<action path="/Liste" name="ListeActeur" scope="session" ...
在这里,您将在请求属性
ListeActeur
中存储一个
java.util.List
。这个请求属性是完全不必要的,因为相同的列表已经存在于会话中存储的bean ListActeur中

但是,在这样做之前,从Hibernate获取一些数据的代码决定这样做

req.getSession(true).setAttribute("ListeActeur", list)
并使用相同的
java.util.List
覆盖会话中存储的Struts

因此,要继续,在这个操作方法调用结束时,您必须

  • 请求中类型为
    java.util.List
    的属性
    ListeActeur
  • 会话中类型为
    java.util.List
    的属性
    ListeActeur
    ,与请求中存储的列表相同
现在执行JSP:

<html:form action="Liste" >
现在,您尝试遍历存储在bean
ListeActeur
的属性
lis
中的集合。我不知道Struts在这里是如何工作的,但它要么在请求中找到您的
java.util.List
,而请求中没有
lis
属性,要么在会话中找到
ListeActeur
bean,但因为它是全新的,所以它的
lis
属性是空的或空的列表

修复此混乱的步骤:

  • 尊重namng约定:变量和属性以小写字母开头。表单bean类应命名为SomethingForm,操作类应命名为SomethingAction。struts配置中的表单bean名称应该命名为somethingForm
  • 表单bean几乎不应该存储在struts-config.xml的会话范围中。将它们存储在请求范围中
  • 您不应该自己在任何作用域中存储表单bean。Struts为你做这件事
  • 负责从数据库获取数据的代码不必处理请求和会话属性。它接受参数中的参数,并返回对象。让您的操作处理请求和会话
  • 由于您选择将查询结果存储在表单bean中,因此无需将其存储在其他位置。Struts将表单bean存储在请求中。将查询结果存储在表单bean中。不需要其他任何东西
  • 为属性选择有意义的名称<代码>lis没有任何意义。如果您有一个Acteur列表,请将其命名为
    Acteur
下面是您的操作方法应该是什么样子(以及它是如何正确缩进的):

公共ActionForward执行(ActionMapping映射,
ActionForm ActionForm,
HttpServletRequest请求,
HttpServletResponse)引发异常{
ListActeurForm=(ListActeurForm)actionForm;
List acteurs=acteurService.findAll();
表.执行人(执行人);
返回映射。findForward(“成功”);
}
下面是JSP的外观(使用JSTL,因为逻辑标记多年来一直被弃用):


演员姓名
acteur的IP地址

我缩进了您的代码,但您用自己的编辑重写了我的更改。缩进您的代码,尊重Java命名约定,所有事情对每个人都会更清晰,包括您。并发布你的真实代码。您甚至没有开始逻辑:iterate标记。如果您的代码是缩进的,您就不会错过。很抱歉,当我发布代码时,它们不会出现。这是我的页面jsp:Nom Acteur:
ADRESE IP:编辑您的代码。缩进id。在问题中添加JSP代码。代码块应该用四个空格缩进,甚至有一个按钮可以为你做:选择你的代码,点击它(它有花括号作为图标)。我的问题中有我的代码jsp,对不起,我是新来的,我不能提出代码我不知道我为什么缩进了你的jsp代码。开口应与闭合相匹配。每隔一对开始和结束标记都相同。你的代码完全错了。缩进它,修复它,然后把它贴回去。并对Java代码执行同样的操作。如果你不缩进你的代码,它将是一个无法阅读的混乱。为了你和你的同事。缩进有助于查找错误。感谢您的回答,但是我如何将jstl与struts1一起使用?就像您在没有struts1的情况下使用jstl一样。将JSTL JAR放在WEB-INF/lib中,在JSP顶部声明标记库,并在JSP中使用标记。但是如果你愿意的话,你可以继续使用struts标签。绝对法
<form-bean name="ListeActeur" type="mesForms.strust.ListeActeur"/>
<action path="/Liste" name="ListeActeur" scope="session" ...
req.setAttribute("ListeActeur", ListeActeur.getLis());
req.getSession(true).setAttribute("ListeActeur", list)
<html:form action="Liste" >
<logic:iterate name="ListeActeur" property= "lis"  id="Acteur" >
public ActionForward execute(ActionMapping mapping, 
                             ActionForm actionForm,
                             HttpServletRequest request, 
                             HttpServletResponse response) throws Exception {
    ListeActeurForm form = (ListeActeurForm) actionForm;
    List<Acteur> acteurs = acteurService.findAll();
    form.setActeurs(acteurs); 
    return mapping.findForward("success");
}
<table>
    <thead>
        <tr>
            <th>Name of the acteur</th>
            <th>IP address of the acteur</th>
        <tr>
    </thead>
    <tbody>
        <%-- one row per acteur --%>
        <c:forEach var="acteur" items="${listeActeurForm.acteurs}">
            <tr>
                <td><c:out value="${acteur.name}"/></td>
                <td><c:out value="${acteur.ipAddress}"/></td>
            </tr>
        </c:forEach>
    </tbody>
</table>