代码之家  ›  专栏  ›  技术社区  ›  lunicon

如何在用户选择后获得原始SelectItem值?

  •  0
  • lunicon  · 技术社区  · 13 年前

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

    <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。 如何获取原始选定项目值(项目类)?

    3 回复  |  直到 13 年前
        1
  •  0
  •   Frank Nimphius-Oracle    13 年前

    实际上,将Java对象传递到HTML页面是不起作用的,因为浏览器只显示String值(看看渲染的HTML页面)。因此,您需要做的是将对象的索引作为值传递。然后,当用户选择一个值时,您获取索引并在列表中查找您感兴趣的真实对象。

    直率的

        2
  •  0
  •   Joe    13 年前

    不值ChangeEvent.getOldValue() 没有这个?

        3
  •  0
  •   Frank Nimphius-Oracle    13 年前

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

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