java - 显示ArrayList(EJB session +Servlet+JSP,无JDBC)

标签 java jsp jakarta-ee ejb

我在堆栈和互联网上进行了搜索,但没有找到解决我问题的答案。

我尝试通过 servlet 将 ArrayList 从 ejb 显示到 jsp 页面。我使用 mysql-connector-java-5.1.22-bin 而不是 jdbc。我成功从数据库获取数据,但 servlet 无法将此 ArrayList 发送到 jsp 页面。你能帮我吗?我已经尝试了很多检查,似乎问题是当我在 servlet 中获取数组列表时。我可能错误地调用了它。

这是我的代码:

访问Bean:

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;
    }

}

我的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");
    }
}

以及我在 jsp 页面中调用 servlet 的地方:

<c:forEach items="${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>

提前致谢。

最佳答案

您正在将数据放入您的 session 中的这一行

session.setAttribute("books", list);

所以你应该在 jsp 中从 session 中检索它们。您可以使用${sessionScope.books}在jsp中访问session。

这会对您有所帮助:

<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>

关于java - 显示ArrayList(EJB session +Servlet+JSP,无JDBC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53769975/

相关文章:

java - Spring REST( Jersey )与 ManyToOne 关系

java - 传递JSP参数,然后检查它们是否存在

java - "Head First Servlet and JSP"示例不起作用

java - 由于 web.xml,JSP 文件未使用 CSS

jakarta-ee - Java/Java EE 面试的管理层

java - ClassNotFoundException 在 weblogic 10.3.6 中的爆炸耳朵中部署 Spring 上下文

java - 如何从 JAR 访问资源?

java - JAX-RS 在运行时更改 @XmlRootElement.name

Java 8 流 : The method boxed() is undefined for the type Stream<Byte>

java - 错误 : non-serializable attribute value into ViewMap