【问题标题】:Display ArrayList (EJB session + Servlet + JSP, no JDBC)显示 ArrayList(EJB 会话 + Servlet + JSP,无 JDBC)
【发布时间】:2019-05-15 03:34:40
【问题描述】:

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

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

这是我的代码:

访问豆:

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

}

我的小服务程序:

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

提前致谢。

【问题讨论】:

  • 对不起:这里缺少第一句话。当然,我的开头是:“大家好”:)

标签: java jsp jakarta-ee ejb


【解决方案1】:

您在这一行将数据放入会话中

session.setAttribute("books", list);

所以你应该在 jsp 中从 session 中检索它们。您可以使用${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>

【讨论】:

  • 谢谢,但效果不好。我想我只是在 servlet 中管理不好数组列表。我看到了错误:'WFLYEJB0054:无法编组 EJB 参数',但这对我来说没有意义..
  • @RobCime 你有没有调试list = remote.getLivresList(); 这一行并且列表没问题?
  • 我确切地认为这是有问题的这一行,但我无法解决它..
  • @RobCime 用于测试目的也尝试将所有数据直接加载到您的 servlet 中。我的意思是在你的servlet中使用Query q = em.createQuery(flightQuery); session.setAttribute("books", q.getResultList());
  • 谢谢斯帕拉。我已经这样做了,它有效!不是最好但还可以!
猜你喜欢
  • 1970-01-01
  • 2013-04-06
  • 2019-04-19
  • 2013-01-04
  • 2014-02-17
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多