【问题标题】:How to get the selected item from an p:orderList?如何从 p:orderList 中获取所选项目?
【发布时间】:2013-05-31 17:17:58
【问题描述】:

我想从orderList 中获取所选项目。在我看来,缺少此功能。 PF中有功能吗?或者有没有可能的解决方法?

非常感谢您的回答!

我的技术栈:

  • 休眠: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

【问题讨论】:

  • 请说明您为此做了什么。
  • @AlexandreLavoie 我已经在展示中实现了orderedList。但是,在我看来,有序列表中没有功能可以取回所选项目。因此,我正在寻找解决此问题的可能方法...
  • 你应该分享这个代码,可能错误与转换器有关。
  • @AlexandreLavoie 好的,谢谢您的回答!但是,orderedList 工作得非常好。它显示了我在数据库中的所有元素。我的问题是,我想从列表中删除某个项目。因此,我想恢复所选项目。但是,我无法做到这一点,因为PF 3.5 中没有实现这种方法(或者我找不到它???)。因此,我正在寻找解决方法或提示其他人如何解决此问题?
  • 那么你的问题是基本的Java,根本与PrimeFaces没有直接关系......

标签: jsf primefaces


【解决方案1】:

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

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

我希望这会有所帮助。

【讨论】:

  • 哦,好难找 :)
【解决方案2】:

我在尝试为 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>

【讨论】:

    【解决方案3】:

    在 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>
    

    【讨论】:

      猜你喜欢
      • 2014-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多