JSF-2 F:与地图selectItems的不显示itemLabel(JSF-2 f:select

2019-06-24 13:24发布

当我使用f:selectItems的显示在地图的项目,我不能显示的地图项的值,只有密钥。 F:selectItems的完全不使用itemLabel。 当我使用一个列表,而不是工作的事情。

下面确实利用itemLabel的显示列表中的一个项目,“说明”:

<h:selectOneMenu>
  <f:selectItems value="#{testBB.testList}" var="s"
    itemLabel="TEST #{s.description}" itemValue="#{TEST s.name}" />
</h:
selectOneMenu>

下面尝试在地图中显示项目的价值无法正常工作。 它显示该项目的关键,但没有使用itemLabel属性,如可以由缺乏“TEST”文本的输出可以看出端倪。

<rich:select>
  <f:selectItems value="#{testBB.testMap}" var="s"
    itemLabel="TEST #{s.value}" itemValue="TEST #{s.key}" />
</rich:select>

使用简单支持bean如下:

public class TestBB {
  private Map<String, String> testMap;
  private List<TestItem> testList;

  public TestBB() {
    testMap = new HashMap<String, String>();
    testMap.put("1_key", "Item One");
    testMap.put("2_key", "Item Two");
    testMap.put("3_key", "Item Three");

    testList = new ArrayList<TestItem>();
    testList.add( new TestItem("name_1", "description_1") );
    testList.add( new TestItem("name_2", "description_2") );
    testList.add( new TestItem("name_3", "description_3") );
  }

  public Map<String, String> getTestMap() {
    return testMap;
  }

  public List<TestItem> getTestList() {
    return testList;
  }

}

那么,如何使这项工作任何想法,就是如何有效地使用同一个selectItems的地图?

Answer 1:

你的问题是合理的,但代码使其混乱和模糊。 我就忽略了这个答案你的代码。

至于具体的问题:“如何使用Map<f:selectItems> ”,你需要认识到,地图功能键为默认被用作商品标签和映射值默认被用作项目值。 你似乎希望它是另一种方式圆(说实话,我也凭直觉想到的是,但那只是一个设计desicion --the映射关键力量的唯一性和选项标签应在UI的角度肯定是独一无二的,但是选项值并不一定需要是唯一的)。

所以,这应该做的(请注意,我用LinkedHashMap在这里,因为它维护插入顺序):

map = new LinkedHashMap<String, String>();
map.put("Label 1", "value1");
map.put("Label 2", "value2");
map.put("Label 3", "value3");

<f:selectItems value="#{bean.map}" />

如果你想的那么交换键和值,那么你就应该循环访问Map#entrySet() 这仅当您的环境支持EL 2.2,你必须通过直接方法调用,因为没有消气为调用它。

map = new LinkedHashMap<String, String>();
map.put("value1", "Label 1");
map.put("value2", "Label 2");
map.put("value3", "Label 3");

<f:selectItems value="#{bean.map.entrySet()}" var="entry" 
    itemValue="#{entry.key}" itemLabel="#{entry.value}" />

也可以看看:

  • 我们selectOneMenu维基页面


文章来源: JSF-2 f:selectItems with Map does not display itemLabel
标签: jsf jsf-2 map el