当前位置: 首页 > 知识库问答 >
问题:

JSF-2 F:selectItems with Map不显示itemLabel

姬锐
2023-03-14
<h:selectOneMenu>
  <f:selectItems value="#{testBB.testList}" var="s"
    itemLabel="TEST #{s.description}" itemValue="#{TEST s.name}" />
</h:
selectOneMenu>
<rich:select>
  <f:selectItems value="#{testBB.testMap}" var="s"
    itemLabel="TEST #{s.value}" itemValue="TEST #{s.key}" />
</rich:select>
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;
  }

}

共有1个答案

麹凯捷
2023-03-14

你的问题是正确的,但代码使它变得混乱和模棱两可。我将在这个答案中忽略你的代码。

对于“在 中如何使用map”这个具体问题,您需要认识到,默认情况下,映射键被用作项目标签,而映射值被用作项目值。您似乎期望它是相反的(老实说,我直觉上也期望它,但这只是一种设计意愿--映射键强制唯一性,选项标签在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时才起作用,因为您必须通过直接方法调用来调用它,因为没有getter可用于此操作。

例如。

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}" />
    null
 类似资料:
  • 我在应用程序中放了一些图像,但这些图像没有出现,我使用的是jsf 更新 应该显示的图像的我的页面 更新图像3

  • 因此,很明显,它识别出输入的名称太短,但我在视图中没有得到任何错误消息,正如这里所预期的:。

  • 我在eclipse中有一个使用jsf的动态web应用程序。我用“New java server faces(jsf)page(xhtml)”模板创建了一个jsp页面,希望只显示一个h:inputText,但当我在tomcat中运行应用程序时,inputText没有显示出来。 有什么问题?

  • 问题内容: 如何使用JSF显示/隐藏组件?我目前正尝试在javascript的帮助下做同样的事情,但没有成功。我不能使用任何第三方库。 谢谢| 阿比 问题答案: 通常,您需要通过其clientId获得该控件的句柄。本示例使用带有请求范围绑定的JSF2 Facelets视图来获取另一个控件的句柄: 确切的操作方式取决于您正在使用的JSF版本。有关较早的JSF版本,请参见此博客文章:JSF:使用组件标

  • 问题内容: 我有bean“ MyBean”,它具有属性HashMap-“ map”,其值类型为MyClass。我想使用ui:repeat在jsf中显示map的一些属性。但是这些代码: 但是这段代码没有显示任何内容。虽然当我尝试以这种方式在jsp中显示hashmap值时,它已成功完成。我哪里错了?以及如何解决? 问题答案: 从文档中获取value属性: 此标签进行迭代的项目集合的名称。集合可以是,数

  • 我有一个提交表单,并希望显示一行,如果选择的关系是儿子或女儿,他们输入生日。 > 最初我没有使用p:row或p:column,而是使用面板网格上的columns属性。但是基于这个如何通过BalusC呈现 ,我知道我需要一个包装器组件,这就是为什么我使用p:row路由的原因。 但是,有没有一种更干净的方法可以不在文本输入上使用所有的p:rows和额外的ajax呢?