我想从orderList中获取所选项目。在我看来,缺少此功能。PF中有功能吗?还是有可能的解决方法?
我真的很感谢你的回答!
我的技术栈:
- 休眠:4.0.1.Final
- 春天:3.1.1.RELEASE
- 素面:3.5
- jsf版本:2.2.0-m08
- PrimefacesMobile 版本:0.9.3
- Apache Tomcat/7.0.12
我想从orderList中获取所选项目。在我看来,缺少此功能。PF中有功能吗?还是有可能的解决方法?
我真的很感谢你的回答!
我的技术栈:
我已经通过使用删除按钮解决了这个问题。代码片段如下:
<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");
我希望这有帮助。
我遇到了同样的问题,试图为我的orderList
. 我尝试将 my 传递var
给动作,结合属性创建动作侦听器和选择侦听器,但均未成功。
我最终使用了dataTable ... draggableRows="true"
(请参阅展示中的数据表重新排序)。在数据表中,我可以简单地将我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>