我想從orderList中獲取所選項目。在我看來,這個功能缺失。 PF中是否有功能?或者是否有可能的解決方法?如何從p:orderList中獲取所選項目?
我真的很感謝你的回答!
我的技術堆棧:
- 休眠:4.0.1.Final
- 春:3.1.1.RELEASE
- Primefaces:3.5
- JSF的版本:2.2.0-M08
- PrimefacesMobile版本:0.9.3
- 的Apache Tomcat/7.0.12
我想從orderList中獲取所選項目。在我看來,這個功能缺失。 PF中是否有功能?或者是否有可能的解決方法?如何從p:orderList中獲取所選項目?
我真的很感謝你的回答!
我的技術堆棧:
我已通過使用刪除按鈕解決了此問題。代碼段低於:
<p:orderList id="layersList" value="#{mappingLayerController.layers}"
converter="layerConverter" var="layer" itemValue="#{layer}"
controlsLocation="left">
<p:column>
<h:outputText value="#{layer.layerName}"/>
</p:column>
<p:column style="width: 4%">
<p:commandButton icon="ui-icon-close" actionListener="#{controller.deleteLayer()}">
<f:param name="layerName" value="#{layer.layerName}" />
</p:commandButton>
</p:column>
</p:orderList>
而且在支持bean可以通過F得到提供的參數:param標籤爲:
String layerName = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("layerName");
我希望這有助於。
哦,很難找到它:) – 2015-05-17 19:50:33
我遇到了同樣的問題,試圖爲我的orderList
中的每個項目創建編輯操作。我嘗試將我的var
傳遞給該動作,創建一個動作偵聽器並結合屬性和一個選擇偵聽器,但都未成功。
我結束了使用dataTable ... draggableRows="true"
(見data table reorder在展示中)。在數據表中,我可以簡單地將我的var
作爲參數傳遞給動作...所以我想。我遇到了重新排序後的問題,點擊編輯按鈕給了我錯誤的項目。我創建了一個解決方法,在重新排序時更新模型並重繪表格。它有效,但感覺不對。
<p:dataTable id="myTable"
value="#{myBean.myItems}"
var="item"
sortBy="#{item.orderNumber}" sortOrder="ascending"
draggableRows="true">
...
<p:column headerText="Actions">
<p:commandButton title="Edit"
action="#{myBean.edit(item)}"
process="@this">
</p:column>
<p:ajax event="rowReorder"
listener="#{myBean.onSlotContentReorder}"
update="myTable"/>
</p:dataTable>
它可能在PrimeFaces 5和更高版本中。沒有開箱功能,但可以通過選定項目的附加列表輕鬆實現。見例如
Java代碼
private List<Record> allItems; // with getter and setter
private List<Record> selectedItems; // with getter and setter
public void onSelect(SelectEvent event) {
if (null == event || null == event.getObject()) {
return;
}
if (!event.isCtrlKey()) {
setSelectedItems(new ArrayList<Record>());
}
Record item = (Record)event.getObject();
if (!getSelectedItems().contains(item)) {
getSelectedItems().add(item);
}
}
public void onUnselect(UnselectEvent event) {
if (null == event || null == event.getObject()) {
return;
}
Record item = (Record)event.getObject();
if (getSelectedItems().contains(item)) {
getSelectedItems().remove(item);
}
}
public void deleteSelected() {
if (getAllItems().isEmpty()) {
addErrorMessage("listEmpty");
return;
}
if (getSelectedItems().isEmpty()) {
addErrorMessage("noItemSelected");
return;
}
for (Record item : getSelectedItems()) {
if (getAllItems().contains(item)) {
getAllItems().remove(item);
}
}
}
XHTML
<h:panelGroup id="listGroup">
<p:orderList id="list" value="#{bean.allItems}"
var="item" itemLabel="#{item.code}" itemValue="#{item}"
converter="#{itemConverter}" controlsLocation="none">
<f:facet name="caption">#{msg.listName}</f:facet>
<p:ajax event="select" listener="#{bean.onSelect}" />
<p:ajax event="unselect" listener="#{bean.onUnselect}" />
</p:orderList>
<p:contextMenu id="listMenu" for="list">
<p:menuitem value="#{msg.delete}"
actionListener="#{bean.deleteSelected}"
update="listGroup, messages"
rendered="#{not empty bean.allItems}" />
</p:contextMenu>
</h:panelGroup>
請出示你有什麼想做到這一點。 –
@AlexandreLavoie我已經實現了像列表中的'orderedList'。但是,在我看來,有序列表中沒有任何功能可以返回選定的項目。因此,我正在尋找一個可能的解決方案,爲這個問題... – maximus
你應該分享這個代碼,可能錯誤是有關的轉換器。 –