1

我有一个简单的问题。我建议用户使用 p:autocomplete 选择一个对象列表。同时,用户可以通过键入不在建议中的名称“即时”创建新对象。整个设置与原版 POJO 展示非常相似,但我在此处发布代码:

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

转换器:

@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;
}
}

我面临的问题似乎很简单:我如何强制这种结构允许用户简单地删除一个值?当用户删除输入字段的内容时,我希望使用 null 或空值调用 PlayerConverter,但这不会发生。

如何获得空输入?

4

1 回答 1

0

我找到了解决方法。使用转换器并将标志添加到您在 p:autocomplete 中显示的对象。在转换器的 getAsString 方法中将标志设置为“假”。在转换器的 getAsObject 方法中将其设置为“true”。当用户清空自动完成字段时,不会调用后者。因此该标志保持为“假”。并且您可以检查命令按钮的操作方法。

我希望它可以帮助某人。

于 2013-06-20T14:52:08.457 回答