[英]how to pass DataTable var from jsf (primefaces) to managedBean?
I have a first dataTable with a list of jobs, for each job of the list I wan't to create a second dataTable (inside the first ) with triggersList this is my jsf page : 我有一个带有作业列表的第一个dataTable,对于该列表中的每个作业,我都不会使用triggersList创建第二个dataTable(在第一个中),这是我的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>
So for each job var I wan't to have triggers List, this is my managedBean : 因此,对于每个作业var,我都不会拥有触发器List,这是我的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;
}
} }
The get() method return a null pointer Exception : get()方法返回空指针Exception:
Caused by: java.lang.NullPointerException at tti.frameworkBI.web.JobBean.get(JobBean.java:129) 造成原因:tti.frameworkBI.web.JobBean.get(JobBean.java:129)上的java.lang.NullPointerException
The easiest way is declare the triggerlist inside the JobDetails class and use it like this: 最简单的方法是在JobDetails类中声明触发器列表,并像下面这样使用它:
<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
Resolved with findComponent and getRowData() : 通过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());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.