1

我想从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
4

3 回答 3

1

我已经通过使用删除按钮解决了这个问题。代码片段如下:

<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");

我希望这有帮助。

于 2014-03-28T16:00:47.843 回答
1

我遇到了同样的问题,试图为我的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>
于 2016-08-05T14:49:05.193 回答
1

在 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>
于 2017-11-11T04:40:56.150 回答