0

我使用自动建议项目创建输入文本

<af:inputText label="Seller" id="Seller"
              valueChangeListener="#{managedBeanTest.OnChangeSeller}" autoSubmit="true"
              autoComplete="on">
  <af:autoSuggestBehavior suggestedItems="#{managedBeanTest.OnSearchSellers}"/>
</af:inputText>

将 SelectItem 值设置为我的类 Item

public class Test
{
    public static class Item
    {
        public Item(int id, String code, String name) { ... }
        public String toString() { ... }
    }

    public List<SelectItem> OnSearchSellers(String search)
    {
        ResultSet rs;
        ...
        List<SelectItem> result = new ArrayList<SelectItem>();

        while (rs.next())
            result.add(new SelectItem(new Item(rs.getInt(1), rs.getString(2), rs.getString(3))));

        return result;
    }

    public void OnChangeSeller(ValueChangeEvent valueChangeEvent)
    {
        Object newVal = valueChangeEvent.getNewValue();

        if(newVal != null)
          System.out.println("OnChangeSeller: " + newVal.getClass().getName());
    }
}

但在 OnChangeSeller 中,我只有 java.lang.String。如何获得原始选定项目值(项目类)?

4

3 回答 3

0

valueChangeEvent.getOldValue() 没有这个吗?

于 2012-07-17T16:42:44.703 回答
0

实际上将 Java 对象传递给 HTML 页面是行不通的,因为浏览器只显示字符串值(查看呈现的 HTML 页面)。所以你需要做的就是将对象的索引作为值传递。然后,当用户选择一个值时,您获取索引并在列表中查找您感兴趣的真实对象。

坦率

于 2012-07-18T06:06:31.163 回答
0

“不是 valueChangeEvent.getOldValue() 没有这个吗?”

是的,如果您使用 ADF 装订。在这种情况下,返回值是列表的索引

于 2012-07-19T05:54:02.573 回答