Primefaces:OrderList 使用 String 而不是 Object 填充后端列表

Primefaces: OrderList fills backend list with String instead of Object

在我的后端视图中,我有一些 POJO 的列表:

BackingView.java

@Getter @Setter private List<SomePOJO> pojoList = ...

SomePojo.java

@EqualsAndHashCode(callSuper = false, of = {"id"})
public class SomePojo implements Serializable {

    private static final long serialVersionUID = 1L;
    
    @Getter @Setter private Long id;
    @Getter @Setter private Long date;
    @Getter @Setter private Date name;
    ....
    
  @Override
  public String toString() {
      return String.format("%s[id=%s]", getClass().getSimpleName(), id);
  }

  //making a readable string-representation of the object to display on the orderList
  public String toStringOrderlistDisplay() {
      return "Pojo with id " + id + "and so on... " 
  }

此列表在所有方面都符合您的预期。最近,我想在我的前端添加一个功能,允许用户手动排序这个列表。为此,我使用 Primefaces OrderList,如下所示:

Frontend.xhtml

<p:orderList id="ordList" widgetVar="ordList"
                                     value="#{backingview.pojoList }" var="rfg"
                                     controlsLocation="left"  responsive="true" itemValue="#{rfg}"
                                     itemLabel="#{rfg.toStringOrderlistDisplay()}">
    
</p:orderList>

一旦我将上面的 p:orderList 添加到我的 .xhtml 文件中,我可以在调试模式下检查时看到 pojoList 不再包含 PojoClass 的实例,而是简单的字符串(更准确地说,是 PojoClass-Object 的字符串表示形式(toString() 方法 return))。 如果我只是删除 orderList,则不会出现此问题。这里发生了什么?在 Java 怎么可能发生这种事?

我尝试使用这里显示的转换器 CountryConverter.java,它成功了。

也许当您不指定转换器时,它使用默认的 .toString() 实现并且无法序列化回 PojoClass

您可以提交问题 here 看看它是否是错误。