gpt4 book ai didi

java - 错误的值被发送到转换器 JSF

转载 作者:行者123 更新时间:2023-11-29 05:32:28 25 4
gpt4 key购买 nike

使转换器、equals 和 JSF 代码正常工作的问题的最终解决方案。

Player 是一个具有一些属性的 Player bean。该服务访问播放器并将播放器信息写入数据库(除此之外:)

<h:selectOneListbox size="1" value="#{player}" 
converter="playerConverter" id="playerList">
<f:selectItems value="#{servicePlayer.allPlayers}"
var="n"
itemValue="#{n}"
itemLabel="#{n.combinedName}"
itemLabelEscaped="true"/>
</h:selectOneListbox>

在服务播放器中

public List<Player> getAllPlayers() {

if (factory == null) {
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
}

EntityManager em = factory.createEntityManager();
Query q = em.createQuery("select t from Player t");

List<Player> players = q.getResultList();

....

@FacesConverter(value = "playerConverter")
public class PlayerConverter implements Converter {

@Override
public Object getAsObject(FacesContext context, UIComponent component, String value) {
if (value == null) {
return null;
}

long idValue;
try {
idValue = Long.parseLong(value);
}
catch (NumberFormatException ex)
{
return null;
}

ServicePlayer servicePlayer = context.getApplication()
.evaluateExpressionGet(context, "#{servicePlayer}",
ServicePlayer.class);
Player player = servicePlayer.getPlayerByID(idValue);
return player;

}

@Override
public String getAsString(FacesContext context,
UIComponent component, Object value) {
if (value == null || value.equals("")) {
return "";
} else {
return String.valueOf(((Player)value).getStringID());
}
}

}

在播放器中

@Override
public boolean equals(Object other) {
return (id != null && other != null && getClass() == other.getClass())
? id.equals(((Player) other).getId())
: (other == this);
}

@Override
public int hashCode() {
return (id != null)
? (getClass().hashCode() + id.hashCode())
: super.hashCode();
}

最佳答案

getAsString 中,您返回一个 String 对象,而在 getAsObject 中,您试图将值解析为 Long: idValue = Long.parseLong(value); 这没有任何意义。

您应该在 getAsString 中返回正确的 id,以便您可以在 getAsObject 中获取它。

已更新

例如您的 getAsString 方法应该如下所示:

public String getAsString(FacesContext facesContext, UIComponent component, Object value) {
if (value == null || value.equals("")) {
return "";
}
else {
return String.valueOf(((ServicePlayer) value).getId());
}
}

关于java - 错误的值被发送到转换器 JSF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20652484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com