Как отобразить в jsp список, полученный из запроса hibernate

Я создаю приложение спящего режима Struts. Я получил список, используя запрос гибернации, и передал его в класс действий. Но я не знаю, как отобразить это в JSP.

Я успешно получил список на основе запроса. Теперь я хочу отобразить этот список в JSP.

Я также разместил struts.xml и JSP для отображения результата. Пожалуйста, проверьте. Но в JSP ничего не появляется. Я использую s:iterate для отображения списка. Но не повезло. Даже я пробовал печатать простой текст под s:iterate, просто для проверки. Но тоже не появляется.

Класс POJO:

package org.sachin.Model;

import java.sql.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;

@Entity
@Table(name="feed")
public class FeedBack {

private FeedBack feedback;
 private int taste;
 private int waiter;
 private int infra;
 private int price;

 private int id;

 private Date date=new java.sql.Date(new java.util.Date().getTime());
public int getTaste() {
    return taste;
}
public void setTaste(int taste) {
    this.taste = taste;
}
public int getWaiter() {
    return waiter;
}
public void setWaiter(int waiter) {
    this.waiter = waiter;
}
public int getInfra() {
    return infra;
}
public void setInfra(int infra) {
    this.infra = infra;
}
public int getPrice() {
    return price;
}
public void setPrice(int price) {
    this.price = price;
}
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId() {
    return id;
}
public void setId(int id) {
    this.id = id;
}


@Temporal(javax.persistence.TemporalType.DATE)
public Date getDate() {
    return date;
}
public void setDate(Date date) {
    this.date = date;
}
public FeedBack getFeedback() {
    return feedback;
}
public void setFeedback(FeedBack feedback) {
    this.feedback = feedback;
}


}

Класс действия:

package org.sachin.action;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.sachin.Model.Datepicker;
import org.sachin.Model.FeedBack;
import org.sachin.hibernate.DateSpecific;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class SelectDateAction extends ActionSupport {

    /**
     * 
     */
private static final long serialVersionUID = -8922465133057293868L;
private Datepicker datepicker;
private List<FeedBack> list =new ArrayList<>();;

    public List<FeedBack> getList() {
    return list;
}
public void setList(List<FeedBack> list) {
    this.list = list;
}
    public String execute(){

        String date=getDatepicker().getDate1();


        DateSpecific da=new DateSpecific();

         list=da.find(date);
         for(FeedBack feed:list){
             System.out.println("price");
             System.out.println(feed.getPrice());


         }

        System.out.println("hi"+date);

        return SUCCESS;
    }


    public Datepicker getDatepicker() {
        return datepicker;
    }
    public void setDatepicker(Datepicker datepicker) {
        this.datepicker = datepicker;
    }

}

Класс гибернации:

public List<FeedBack> find(String Date) {


                //  Transaction t=session.beginTransaction(); 

            String SQL_QUERY = " from FeedBack where date='"+Date+"'";
            System.out.println("i am in hiber");
            System.out.println(SQL_QUERY);
            org.hibernate.Query query = session.createQuery(SQL_QUERY);
            List<FeedBack> list = query.list();
          for(FeedBack f:list){
              System.out.println("price");
              System.out.println(f.getPrice());
          }
            return list;

        }

Это мой struts.xml в котором определены все действия. Пока действие ByDate.

struts.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
   "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
   "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

    <constant name="struts.devMode" value="true" />
<!--    <constant name="struts.action.excludePattern" value="/ServletToExcludeFromStruts*" />
 -->
    <include file="login.xml"></include>
    <include file="AdminLogin.xml"></include>
    <include file="Feedback.xml"></include>
    <include file="NewUser.xml"></include>
    <include file="feedback.xml"></include>
    <include file="expression.xml"></include>
    <include file="logout.xml"></include>

    <package name="helloworld" namespace="/tut" extends="struts-default">
        <action name="add" class="org.sachin.action.EditAdminAction"
            method="execute">
            <result name="success">/JSP/success.jsp</result>
            <result name="error">/JSP/AdminUserNameExists.jsp</result>

        </action>

    </package>

     <package name="serve" namespace="/tut" extends="struts-default">

        <action name="ByDate" class="org.sachin.action.SelectDateAction"
            method="execute">
            <result name="success" type="redirect">/JSP/iterate.jsp</result>
            <result name="error" type="redirect">/JSP/FeedBack.jsp</result>
            <result name="input" type="redirect">/JSP/Rateus.jsp</result>

        </action>
    </package>


</struts>

Это мой JSP для отображения списка

iterate.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<s:form>
<body>
 <h1>Struts 2 Iterator tag example</h1>

<h3>Simple Iterator</h3>
<ol>
<s:iterator value="list">
 HE<li><s:property /></li>
</s:iterator>
</ol>
  </body>
  </s:form>
  </html>

Я успешно получил список на основе запроса. Теперь я хочу отобразить этот список в JSP.


person Sachin Sharma    schedule 22.08.2014    source источник


Ответы (3)


Используйте тег iterator:

Итератор будет перебирать значение. Итерируемое значение может быть любым из: java.util.Collection, java.util.Iterator, java.util.Enumeration, java.util.Map или массивом.

Код:

<s:iterator value="list"/>
  Price: <s:property value="price"/><br>
</s:iterator> 
person Roman C    schedule 22.08.2014
comment
нужно ли создавать геттеры и сеттеры для таких полей, как цена? - person Sachin Sharma; 22.08.2014
comment
я запутался в использовании итератора, так как даже текстовая цена не отображается Роман - person Sachin Sharma; 22.08.2014
comment
отображается jsp с тегами struts? У вас должен быть геттер для price, и если вы используете внутренний класс FeedBack, вы должны сделать его внешним общедоступным классом. - person Roman C; 22.08.2014
comment
Опубликуйте свой JSP и struts.xml. - person Roman C; 23.08.2014
comment
s:form должен быть внутри тега body. В теге свойства используйте значение, которое является свойством объекта FeedBack. - person Roman C; 25.08.2014
comment
Это всего лишь одна ошибка в вашем коде, но в вашем коде их много. Удалить type="redirect" из результатов. - person Roman C; 25.08.2014
comment
Пожалуйста, предложите мои ошибки, чтобы я позаботился о них в будущем - person Sachin Sharma; 25.08.2014
comment
Я не могу их сосчитать: 1) (не ошибка, но...) Используйте строчные буквы имени пакета, чтобы вы могли легко отличить его от класса 2) обновите и обновите свой struts.xml до последней версии DTD. 3) Используйте параметры в запросе, чтобы избежать инъекции SQL. 4) Не используйте java.sql.Date, потому что он сокращает временную часть даты. 5) Реализовать интерфейс Preparable и заполнить его списком, прежде чем возвращать "input"result. - person Roman C; 25.08.2014
comment
Спасибо Роман,все пункты понятны..кроме последнего про Preparable interface - person Sachin Sharma; 25.08.2014
comment
Вы можете выполнить поиск по SO, используя ключевые слова Preparable и validation, и вы обязательно найдете множество ответов. - person Roman C; 25.08.2014

Пожалуйста, проверьте следующий код.

<s:iterator value="list" var="item"> 
<s:property value="%{#item.price}" /> 
</s:iterator> 
person Naveen Kumar    schedule 22.08.2014
comment
Навин, тогда как я могу распечатать поля списка? - person Sachin Sharma; 22.08.2014
comment
Сачин, пожалуйста, попробуйте с этой логикой, может быть, это сработает. ‹s:iterator value=list var=item› ‹s:property value=%{#item.price} /› ‹/s:iterator› - person Naveen Kumar; 22.08.2014
comment
Навин не работает, пожалуйста, просмотрите мой класс действий. Я думаю, что я делаю что-то не так. Не знаю много о том, как работает итератор - person Sachin Sharma; 22.08.2014
comment
Пожалуйста, поделитесь данными вашего списка с данными объекта. переопределите метод toString() в классе FeedBack, а затем отправьте данные списка. - person Naveen Kumar; 22.08.2014

вы уже глобально объявляете list variable

  private List<FeedBack> list =new ArrayList<FeedBack>();//Getter & Setter Method.

и вам нужен метод Getter & Setter для всех. И удалите свое повторное объявление в локальном.

List<FeedBack> list = query.list(); изменить на list = (List<FeedBack>)query.list(); и требуется покрытие.

добавить библиотеку struts на страницу jsp, наконец,

 <s:iterator value="list"/>
      Price: <s:property value="price"/><br>
 </s:iterator> 
person hari    schedule 22.08.2014
comment
нужно ли создавать геттеры и сеттеры для поля цены? И я также смущен использованием s: iterator, поскольку даже текстовая цена не отображается. Пожалуйста, помогите - person Sachin Sharma; 22.08.2014