显示ArrayList(EJB会话+ Servlet + JSP,无JDBC)

时间:2018-12-13 20:58:42

标签: java jsp java-ee ejb

我已经在堆栈和互联网上进行搜索,但找不到问题所在的答案。

我尝试通过servlet从ejb到jsp页面显示ArrayList。我使用mysql-connector-java-5.1.22-bin而不是jdbc。我成功地从数据库中获取了数据,但是servlet无法将此ArrayList发送到jsp页面。你能帮我吗?我已经尝试了许多检查,看来问题出在当我在servlet中获得arraylist时。我可能不好称呼它。

这是我的代码:

accessBean:

def __init__(self, connection=None, some=None, thing=None, else=None):
   self.connection = SetConnection() if connection is None else connection

我的servlet:

public class accessBean implements accesCatalogueBeanRemote,     accesCatalogueBeanLocal {
public List getLivresList() {
        String flightQuery = "SELECT p FROM produit p"; 
        Query q = em.createQuery(flightQuery); 
        List existing = q.getResultList();          
        return existing;
    }

}

我在jsp页面中调用servlet的位置:

@WebServlet("/servlet")
public class servlet_produit extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                HttpSession session = request.getSession(true);
                List list = null;

                //Connexion JNDI (annuaire pour localiser l'EJB)
                try{
                final Hashtable jndiProperties = new Hashtable();
                jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
                final Context context = new InitialContext(jndiProperties);
                final String appName = "BktEAR";
                final String moduleName = "Commands";

                final String beanName = "JNDI";
                final String viewClassName = accesCatalogueBeanRemote.class.getName();
                accesCatalogueBeanRemote remote = (accesCatalogueBeanRemote)
                context.lookup("ejb:"+appName+"/"+moduleName+"/"+
                beanName+"!"+viewClassName);
                list = remote.getLivresList();
                }
                catch (Exception e) {
                e.printStackTrace();
                }
                session.setAttribute("books", list);
                response.sendRedirect("product.jsp");
    }
}

多谢。

1 个答案:

答案 0 :(得分:1)

您正在此行将数据放入会话中

session.setAttribute("books", list);

因此,您应该从会话的jsp中检索它们。您可以使用${sessionScope.books}在jsp中访问会话。

这将帮助您:

<c:forEach items="${sessionScope.books}" var="list">
    <tr>
        <td>ok : ${list.id}</td>
        <td><c:out value="${list.name}" /></td>
        <td><c:out value="${list.description}" /></td>
        <td><fmt:formatNumber value="${list.price}" type="currency" /></td>
    </tr>
</c:forEach>