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 看看它是否是错误。
在我的后端视图中,我有一些 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 看看它是否是错误。