有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何将数据表变量从jsf(primefaces)传递到managedBean?

我有一个带有作业列表的第一个数据表,对于列表中的每个作业,我不想用triggersList创建第二个数据表(在第一个数据表中)。这是我的jsf页面:

<p:dataTable id="jobs" var="job" value="#{jobBean.jobList}" rowKey="job.key">
    <f:facet name="header">  
            Jobs List 
    </f:facet>
<p:column headerText="Name">  
        #{job.key.name}   
    </p:column>
<p:column headerText="Group">  
        #{job.key.group}  
    </p:column>
    <p:column headerText="Triggers">
    <p:dataTable id="triggers" var="trigger" value="#{jobBean.triggerList}">
    <p:column headerText="Start Time">  
                #{trigger.startTime}   
        </p:column>
    </p:dataTable>
 </p:column>
 </p:dataTable>

因此,对于我不想有触发器列表的每个作业变量,这是我的managedBean:

public class JobBean implements Serializable {

    @ManagedProperty(value = "#{job}")
private JobDetail job;
    private List<Trigger> triggerList;

   ....


        /**
 * @param triggerList
 *            the triggerList to set
 */
public void setTriggerList(List<Trigger> triggerList) {
    this.triggerList = triggerList;
}

/**
 * @return the triggerList
 */
public List<Trigger> getTriggerList() {
    this.get();
    return triggerList;
}

private void get(){
    FacesContext ctx = FacesContext.getCurrentInstance();
    JobDetail jb = ctx.getApplication().evaluateExpressionGet(ctx, "# {job}", JobDetail.class);
    this.triggerList = triggerListMap.get(jb.getKey());
}



    /**
 * @param job
 *            the job to set
 */
public void setJob(JobDetail job) {
    this.job = job;
}

/**
 * @return the job
 */
public JobDetail getJob() {
    return job;
} 

}

get()方法返回空指针异常:

原因:java。lang.NullPointerException 在tti。框架。网状物JobBean。get(JobBean.java:129)


共 (2) 个答案

  1. # 1 楼答案

    使用findComponent和getRowData()解析:

    public List<Trigger> getTriggerList() {
            this.get();
            return triggerList;
        }
    
    private void get() {
        DataTable dataTable = (DataTable) FacesContext.getCurrentInstance()
                .getViewRoot().findComponent("form:jobs");
        JobDetail jb = (JobDetail) dataTable.getRowData();
        this.triggerList = this.jobServiceImpl.getAllTriggers(scheduler,
                jb.getKey());
    
    }
    
  2. # 2 楼答案

    最简单的方法是在JobDetails类中声明triggerlist,并如下使用:

    <p:dataTable id="jobs" var="job" value="#{jobBean.jobList}" rowKey="job.key">
          <f:facet name="header">  
                    Jobs List 
            </f:facet>
    <p:column headerText="Name">  
             #{job.key.name}   
         </p:column>
    <p:column headerText="Group">  
             #{job.key.group}  
         </p:column>
    <p:column headerText="Triggers">
         <p:dataTable id="triggers" var="trigger" value="#{job.triggerList}">
            <p:column headerText="Start Time">  
                        #{trigger.startTime}   
            </p:column>
         </p:dataTable>
    </p:column>
         </p:dataTable> code here