【问题标题】:Not able to get List from inside bean in a JSP无法从 JSP 中的 bean 内部获取列表
【发布时间】:2013-12-01 02:10:08
【问题描述】:

我正在尝试在我的 jsp 上使用存储在会话中的名为 copa 的 bean 中的信息创建打印字符串列表。

<jsp:useBean id="copa" class="Beans.CopaBean" scope="session"/>

                                <c:forEach var="item" items="${copa.mSelecciones}">
                                       ${item.mNombre}
                                    </c:forEach>

我的对象 copa,实现 java.io.Serializable。它里面有一个也实现了这个接口的对象列表。 我还可以看到在 NetBeans 的变量选项卡中填充了 copa 对象,以及内部包含数据的 mSelecciones 集合..

我已经尝试了一切......从将属性 mSelecciones 公开,将名称更改为更短,调用 get 方法 getmSelecciones() 等,但我无法让我的代码打印任何文本在 html 上。

有什么帮助吗?

这是我运行代码时 HTML 中的打印输出,你可以看到我有两个对象坐在那里..只是无法迭代它们。

 <c:forEach var="a" items="[Beans.SeleccionBean@7022efdf, Beans.SeleccionBean@5b252fd]">

                                    </c:forEach>

这是我的 CopaBean 类结构:

    public class CopaBean implements java.io.Serializable {

    public  List<SeleccionBean> mSelecciones = null;


    public List<SeleccionBean> getmSelecciones() throws SQLException {
     }
}

这是我的 SeleccionesBean 类结构:

    public class SeleccionBean  implements java.io.Serializable{
    private String mNombre;
    public String getmNombre() {
            return mNombre;
     }
}

【问题讨论】:

  • 它必须完全遵循类结构。例如:如果您的列表 B 在 A 类中,则使用 class="A" 并在里面执行
  • 我不太明白你的评论,我相信我正在做你所说的......或者你的意思是而不是 var="item" 我应该放类似 var="Beans.Selecciones" 的东西?
  • 不,var没有问题。您可以编辑帖子以便我了解班级结构吗?试试 ${mSelecciones} 而不是 ${copa.mSelecciones}
  • 已编辑,我尝试做 mSelecciones 但也没有用。
  • 你试过item.getmNombre()吗?

标签: java jsp jstl


【解决方案1】:

您正在使用 JSTL,因此您必须为您打算与 JSTL 一起使用的所有方法使用 JavaBean 命名约定

例如,&lt;c:forEach var="item" items="${copa.mSelecciones} 语句失败,因为 java 应用程序服务器正在尝试解析方法 CopaBean.getMSelecciones() 并且找不到它。请注意,M 是大写的。另外请注意,您方法中的m 不是!

为了让应用服务器解析该方法,您必须确保其名称遵循JavaBean 命名约定。例如getter 和 setter 的格式必须分别为 getSomeMethodsetSomeMethod。请注意,get/set 后面的第一个字母是大写的。

要修复您的代码,请更改

public List<SeleccionBean> getmSelecciones() throws SQLException {

public List<SeleccionBean> getMSelecciones() throws SQLException {

SeleccionBean.getmNombre() 也有同样的问题。将其更改为SeleccionBean.getMNombre()

【讨论】:

    【解决方案2】:

    JavaBean 约定是通过使用“set”或“get”来定义 getter 和 setter,后跟第一个字母大写的属性名称,即对于mSelecciones,getter 将是 getMSelecciones(),而不是getmSelecciones()。与mNombre 相同 -> getMNombre()

    【讨论】:

    • 没用,幸运的是解析器没有那么懒惰,不会寻找第一个大写字母作为分隔符..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 2015-04-24
    • 1970-01-01
    • 2014-07-20
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多