Primefaces p:POJO自动完成-如何获取空值?
我有一个简单的问题。我建议用户使用p:autocomplete选择一个对象列表。同时,用户可以通过键入不在建议中的名称“动态”创建新对象。整个设置与vanilla POJO showcase非常相似,但我在这里发布代码:Primefaces p:POJO自动完成-如何获取空值?,primefaces,Primefaces,我有一个简单的问题。我建议用户使用p:autocomplete选择一个对象列表。同时,用户可以通过键入不在建议中的名称“动态”创建新对象。整个设置与vanilla POJO showcase非常相似,但我在这里发布代码: <p:autoComplete id="player" value="#{entry.player}" completeMethod="{abean.complete}" var="s1" itemLabe
<p:autoComplete id="player" value="#{entry.player}"
completeMethod="{abean.complete}"
var="s1" itemLabel="#{s1.name}" itemValue="#{s1}"
converter="PlayerConverter">
<p:ajax event="itemSelect" listener="#{abean.playerSelected}"/>
</p:autoComplete>
我所面临的问题似乎很简单:我如何强制这种构造允许用户简单地删除一个值?当用户删除输入字段的内容时,我希望得到一个调用PlayerConverter的null或空值,但这并没有发生
如何处理空输入?我找到了一个解决方法。使用转换器并将标志添加到正在p:autocomplete中显示的对象。在转换器的getAsString方法中将标志设置为“false”。在转换器的getAsObject方法中将其设置为“true”。当用户清空autocomplete字段时,不会调用后者。因此,该标志仍为“false”。您可以检查命令按钮的操作方法 我希望它能帮助别人
@FacesConverter(forClass=Player.class, value = "PlayerConverter")
public class PlayerConverter implements Converter
{
@Override
public Object getAsObject(FacesContext ctx, UIComponent cmp, String value)
{
Player player = null;
if ( !(value==null || value.trim().isEmpty()))
{
// Autocomplete did find a match, the appropriate
// player is returned
try
{
Integer id = Integer.valueOf(value);
player = TeamService.getInstance().getPlayer(id);
}
catch (NumberFormatException e)
{
// Autocomplete found no match, the entered String
// is given. Create an ad-hoc player as response
player = new Player();
player.setName(value);
player.setAdHoc(true);
}
}
return player;
}
@Override
public String getAsString(FacesContext ctx, UIComponent cmp, Object value)
{
String result = null;
if (value instanceof String)
{
result = (String) value;
}
else if (value instanceof Spieler)
{
Integer id = ((Spieler)value).getId();
result = (id == null) ? null : id.toString();
}
return result;
}
}