【问题标题】:How to populate an arraylist in panelGrid of JSF 2.0?如何在 JSF 2.0 的 panelGrid 中填充数组列表?
【发布时间】:2012-11-12 13:39:02
【问题描述】:

我在从 arraylist 填充数据时在 jsf panelgrid 中遇到问题。我收到错误为 javax.el.PropertyNotFoundException: /facelet/crew/searchCrew.xhtml @14,95 value="#{searchCrewBean.searchCrewParam.staffNum}": Target Unreachable, 'searchCrewParam' returned null

请在下面找到我的代码,请帮助我..

JSF 代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:ui="http://java.sun.com/jsf/facelets">
<h:body>
    <ui:composition template="/facelet/layout/mainlayout.xhtml">
    <ui:define name="content">
        <h:form>
            <h:panelGrid columns="7" border="2" title="Crew information"
                rendered="true">
                <f:facet name="header">
                    <h:panelGroup border="2">
                        <h:inputText value="Staffnum" size="6" />
                        <h:inputText value="Surname" size="10" maxlength="25" />
                        <h:inputText value="Age" size="2" />
                        <h:inputText value="Rank" size="3" />
                        <h:inputText value="Type" size="1" />
                        <h:inputText value="Scexpiry" size="10" />
                        <h:inputText value="Mailboxno" size="4" />
                    </h:panelGroup>
                <ui:repeat var="o" value="#{searchCrewBean.listOfSearchCrew}">
                    <h:panelGroup rendered="true">
                        <h:inputText id="staffnum" value="o.staffNum" size="6" />
                        <h:inputText id="surname" value="o.surName" size="10"
                            maxlength="25" />
                        <h:inputText id="age" value="o.age" size="2" />
                        <h:inputText id="rank" value="o.rank" size="3" />
                        <h:inputText id="type" value="o.type" size="1" />
                        <h:inputText id="scexpiry" value="o.scExpiry" size="10" />
                        <h:inputText id="mailboxno" value="o.mailBoxNo" size="4" />
                    </h:panelGroup>
                </ui:repeat>

            </h:panelGrid>
        </h:form>
    </ui:define>
</ui:composition>
</h:body>
</html>

我的支持豆在这里...

@ManagedBean(name="searchCrewBean")
public class SearchCrewBean {
    private ArrayList<Crew> listOfSearchCrew ;

        public ArrayList<Crew> getListOfSearchCrew() {
        return listOfSearchCrew;
    }

    public void setListOfSearchCrew(ArrayList<Crew> listOfSearchCrew) {
        this.listOfSearchCrew = listOfSearchCrew;
}

//business logic goes here to add listofcrew
    }

这里还有我的船员班……

公共班级船员{

private String staffNum;

private String surName;

private Integer age;

private String rank;

private Character type;

private String scExpiry;

private Long mailBoxNo;
}

@Akselwillgert 我正在加载船员名单如下 私有 ArrayList listOfCrew ; 私有 ArrayList listOfSearchCrew ;

public void loadCrew()
{
    listOfCrew = new ArrayList<Crew>();
    listOfCrew.add(new Crew("000212", "HATHELY", 70, "CPT",'T',"13.03.2013",Long.parseLong("1012")));
    listOfCrew.add(new Crew("000213", "MIKE", 52, "F/O",'T',"14.03.2013",Long.parseLong("1013")));
    listOfCrew.add(new Crew("000214", "JOHN", 45, "S/O",'T',"15.03.2013",Long.parseLong("1014")));
    listOfCrew.add(new Crew("000215", "NOTE", 35, "CPT",'T',"16.03.2013",Long.parseLong("1015")));
    listOfCrew.add(new Crew("000216", "KARTHIK", 27, "CPT",'T',"17.03.2013",Long.parseLong("1016")));
    listOfCrew.add(new Crew("000217", "JESSIE", 30, "PUR",'C',"18.02.2013",Long.parseLong("1017")));
    listOfCrew.add(new Crew("000218", "LISSA", 29, "F/A",'C',"19.02.2013",Long.parseLong("1018")));
    listOfCrew.add(new Crew("000219", "MARKUS", 40, "CPT",'T',"13.03.2013",Long.parseLong("1019")));
    listOfCrew.add(new Crew("000220", "JONTHAN", 46, "F/O",'T',"13.03.2013",Long.parseLong("1020")));
    listOfCrew.add(new Crew("000221", "BATMAN", 33, "S/O",'T',"13.03.2013",Long.parseLong("1021")));

}

仍然面临同样的问题...

@ManagedBean(name="searchCrewBean")
public class SearchCrewBean {

private SearchCrew searchCrewParam;
}


public class SearchCrew {

private String staffNum;

private String surName;

private String rank;
//getters and setters goes here..
}

【问题讨论】:

  • 您的列表为空?或者你在哪里初始化它?
  • 你在哪里调用这个方法?
  • 你在哪里调用loadCrew()方法?
  • 哎呀,我想在任何我认为我从 ctor 调用但没有调用的任何地方调用此方法 :-( 让我在调用此方法后尝试并在此处发布
  • 这是我第一个映射搜索参数的 jsf .. &lt;h:outputText value="Staff Number: " /&gt; &lt;h:inputText id="staffnum" size="6" value="#{searchCrewBean.searchCrewParam.staffNum}" /&gt; &lt;h:outputText value="Surname: " /&gt; &lt;h:inputText id="surname" size="10" maxlength="25" value="#{searchCrewBean.searchCrewParam.surName}" /&gt; &lt;h:outputText value="Rank: " /&gt; &lt;h:inputText id="rank" size="3" value="#{searchCrewBean.searchCrewParam.rank}" /&gt; &lt;h:commandButton value="Search" action="#{searchCrewBean.search}" /&gt;

标签: jsf-2 arraylist populate uirepeat


【解决方案1】:

所以如果你在同一个类中有loadCrew 方法,试试这个

public ArrayList<Crew> getListOfSearchCrew() {
  if( listOfSearchCrew == null ) {
     loadCrew() ;
   }
   return listOfSearchCrew;
}

【讨论】:

  • 只需在getListOfSearchCrew() 中添加一个日志,以确保它是否被调用。它必须被调用。你在哪里调用该加载方法?
  • 当一个命令按钮的动作触发时我正在调用..如下..首先加载的船员列表,然后正在调用搜索 findcrew 的方法..public String search() { if(listOfCrew == null) { loadCrew(); } listOfSearchCrew = findCrew(); if(listOfSearchCrew.size()&gt;0) { return "success" ; } else return "failure" ; }
【解决方案2】:

我在这里犯了一个错误, 在支持 bean 中,我忘记实例化搜索组参数,如下所示 @ManagedBean(name="searchCrewBean") public class SearchCrewBean { private SearchCrew searchCrewParam; // old line private SearchCrew searchCrewParam= new SearchCrew(); // newline }

为了在 jsf 页面中显示数组列表,我使用了来自 jsf 的 h:dataTable 标记,这很有帮助。 参考http://www.mkyong.com/jsf2/jsf-2-datatable-example/

【讨论】:

    猜你喜欢
    • 2015-01-15
    • 1970-01-01
    • 2012-05-04
    • 2022-01-19
    • 2015-07-22
    • 2013-11-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    相关资源
    最近更新 更多