1

我需要像属性包这样的东西来将键值对放入其中。我想创建此类对象的列表,在 bean 中初始化它们,然后使用该列表在 JSF 模板中呈现表。我知道该怎么做,但我想避免为这种情况创建一些特殊的类,比如OrderLineItem使用List<OrderLineItem>. 我不想定义新类。

在 PHP 中,我可以使用 StdClass。
StdClass 是 PHP 中一个文档稀疏的类,它没有预定义的成员。

$object = new StdClass;
$object->foo = 'bar';

但是,据我所知,Primefaces<p:dataTable>列表项必须是带有 getter 的对象。如果我想引用<h:outputText value="#{item.title}" />,我的列表对象应该有getTitle()方法。

在我的情况下是否有任何解决方法,或者我真的需要定义特殊类以使生活更轻松?
谢谢。

4

4 回答 4

7

当您想要一个简单的键/值表时,HashMap可能就是您正在寻找的。

Map<String, String> myMap = new HashMap<>();

myMap.put("foo", "bar");

System.out.println(myMap.get("foo")); // outputs "bar"

此示例将字符串匹配到字符串,但您可以使用 HashMaps 将任何类型映射到任何其他类型。您甚至可以创建一个Map<Object, Object>来创建一个弱类型映射,它将任何东西映射到任何东西。但是对于大多数用例,您宁愿使用更专业的形式。

于 2013-01-29T12:18:25.510 回答
4

你需要的是一个Map.

你可以很容易地在其中存储键值对:

Map<KeyClass, ValueClass> myMap = new HashMap<KeyClass, ValueClass>();

使用put方法将数据放入其中。如果您使用简单的String值,它将是这样的:

myMap.put("key", "value");
于 2013-01-29T12:22:59.890 回答
1

我不知道我是否理解你。但我认为您的意思是 SelectItem 或 JsfMap。

于 2013-01-29T12:19:36.133 回答
1

我建议使用匿名类:

return new HashMap<String, String>() {
  {
    this.put("key", "value");
  }
};
于 2013-01-29T15:18:09.367 回答