数据中嵌套元素的 JSF getRowData table
JSF getRowData on nested element in data table
我正在使用 JSF 开发一个应用程序来管理我公司各个办公室的人员进行的旅行。
(我会尽量将代码保持在最低限度)
我有一个对象 Trip、一个对象 Office 和一个辅助对象 OfficeWithTrips:
public class Trip {
private BigDecimal id;
private BigDecimal officeId;
// getters and setters
}
public class OfficeWithTrips {
private Office office;
private DataModel<Trip> trips;
// getters and setters
}
该应用程序有两个页面:一个是每个经理可以看到他必须管理的办公室和每个办公室的行程,另一个是单次行程的详细信息。
我有一个会话 bean,其中包含办公室及其行程的列表:
public class TripsListBean implements Serializable {
private DataModel<OfficeWithTrips> officesWithTrips;
private Trip currentTrip = new Trip();
// getters and setters
}
在主页上,我浏览了 bean 中的 "offices",它有一个嵌套的 Trips 列表。每个办公室 table 及其旅行列表都有一个带 "add new trip" 按钮的页脚。
<h:dataTable value="#{tripsListBean.officesWithTrips}" var="officeWithTrips">
<h:column>
<h:form id="tripForm">
<h:dataTable value="#{officeWithTrips.trips}" var="trip">
<f:facet name="header">
<h:panelGrid columns="2">
<h:outputText value="Trips for the office: " />
<h:outputText value="#{officeWithTrips.office.name}" />
</h:panelGrid>
</f:facet>
<f:facet name="footer">
<h:commandButton value="Add new trip"
action="#{tripsHandler.addTrip}" />
</f:facet>
<h:column>
<f:facet name="header">Trip date</f:facet>
<h:outputText value="#{trip.date}">
<f:convertDateTime type="date" pattern="dd.MM.yyyy" />
</h:outputText>
</h:column>
// other columns
<h:column>
<h:commandButton value="edit"
action="#{tripsHandler.editTrip}">
<f:setPropertyActionListener target="#{tripsHandler.currentTrip}"
value="#{trip}" />
</h:commandButton>
</h:column>
</h:dataTable>
</h:form>
</h:column>
</h:dataTable>
当我点击"add new trip"时,我希望能够在行程中设置office id。我在 "addTrip()" 方法中所做的是这样的:
public String addTrip() {
OfficeWithTrips officeWithTrips = tripsListBean.getOfficesWithTrips().getRowData();
Trip trip = new Trip();
trip.setOfficeId(officeWithTrips.getOffice.getId());
tripsListBean.setCurrentTrip(trip);
return TRIP_DETAIL_URL;
}
我的问题是,在 addTrip 中,officesWithTrips 中的索引始终为 0,当我想将行程添加到列表中的第二个办公室时,它不起作用(它总是 returns 第一个办公室) .
谁能找出错误?我 猜测 当我单击 "add new trip" 按钮时,这会在 officeWithTrips.trips 数据模型中设置索引,但不会在 tripsListBean.officesWithTrips...
我用另一个 setPropertyActionListener 解决了这个问题:我在 TripsListBean
中添加了一个 Office currentOffice
,并直接在 jsf 页面上用 setPropertyActionListener
设置了它。基本上,我为 currentTrip
做的一样
我正在使用 JSF 开发一个应用程序来管理我公司各个办公室的人员进行的旅行。 (我会尽量将代码保持在最低限度)
我有一个对象 Trip、一个对象 Office 和一个辅助对象 OfficeWithTrips:
public class Trip {
private BigDecimal id;
private BigDecimal officeId;
// getters and setters
}
public class OfficeWithTrips {
private Office office;
private DataModel<Trip> trips;
// getters and setters
}
该应用程序有两个页面:一个是每个经理可以看到他必须管理的办公室和每个办公室的行程,另一个是单次行程的详细信息。
我有一个会话 bean,其中包含办公室及其行程的列表:
public class TripsListBean implements Serializable {
private DataModel<OfficeWithTrips> officesWithTrips;
private Trip currentTrip = new Trip();
// getters and setters
}
在主页上,我浏览了 bean 中的 "offices",它有一个嵌套的 Trips 列表。每个办公室 table 及其旅行列表都有一个带 "add new trip" 按钮的页脚。
<h:dataTable value="#{tripsListBean.officesWithTrips}" var="officeWithTrips">
<h:column>
<h:form id="tripForm">
<h:dataTable value="#{officeWithTrips.trips}" var="trip">
<f:facet name="header">
<h:panelGrid columns="2">
<h:outputText value="Trips for the office: " />
<h:outputText value="#{officeWithTrips.office.name}" />
</h:panelGrid>
</f:facet>
<f:facet name="footer">
<h:commandButton value="Add new trip"
action="#{tripsHandler.addTrip}" />
</f:facet>
<h:column>
<f:facet name="header">Trip date</f:facet>
<h:outputText value="#{trip.date}">
<f:convertDateTime type="date" pattern="dd.MM.yyyy" />
</h:outputText>
</h:column>
// other columns
<h:column>
<h:commandButton value="edit"
action="#{tripsHandler.editTrip}">
<f:setPropertyActionListener target="#{tripsHandler.currentTrip}"
value="#{trip}" />
</h:commandButton>
</h:column>
</h:dataTable>
</h:form>
</h:column>
</h:dataTable>
当我点击"add new trip"时,我希望能够在行程中设置office id。我在 "addTrip()" 方法中所做的是这样的:
public String addTrip() {
OfficeWithTrips officeWithTrips = tripsListBean.getOfficesWithTrips().getRowData();
Trip trip = new Trip();
trip.setOfficeId(officeWithTrips.getOffice.getId());
tripsListBean.setCurrentTrip(trip);
return TRIP_DETAIL_URL;
}
我的问题是,在 addTrip 中,officesWithTrips 中的索引始终为 0,当我想将行程添加到列表中的第二个办公室时,它不起作用(它总是 returns 第一个办公室) .
谁能找出错误?我 猜测 当我单击 "add new trip" 按钮时,这会在 officeWithTrips.trips 数据模型中设置索引,但不会在 tripsListBean.officesWithTrips...
我用另一个 setPropertyActionListener 解决了这个问题:我在 TripsListBean
中添加了一个 Office currentOffice
,并直接在 jsf 页面上用 setPropertyActionListener
设置了它。基本上,我为 currentTrip