JSF 中未填充下拉列表
Posted
技术标签:
【中文标题】JSF 中未填充下拉列表【英文标题】:Dropdown list is not populating in JSF 【发布时间】:2022-01-19 04:58:39 【问题描述】:我正在研究 Managedbeans 和 JSF。如下所示,我的 ManagedBean 包含 JSF 获取值所需的所有要求。我已经初始化了我的下拉列表,如下所示。在 selectOneMenu 中,我选择了国家作为字符串,它将存储下拉列表选择的值,下拉列表将显示我在 Beans 中声明的列表。 不幸的是,它不是那样发生的。每次下拉呈现它都会给我一个空值。我已经花了几天时间,但无法找出确切的解决方案。我已经清理了我的服务器,构建了工作空间并更改了服务器,但没有任何效果。
** ManagedBean_list **
private List<String> listCountry;
private String country;
public void tada()
listCountry=Arrays.asList("India", "pakisatan","America");
public List<String> getListCountry()
return listCountry;
public void setListCountry(List<String> listCountry)
this.listCountry = listCountry;
public String getCountry()
return country;
public void setCountry(String country)
this.country = country;
JSF
<p:selectOneMenu id="country" value="#loginBeans.country">
<f:selectItems value="#loginBeans.listCountry" />
</p:selectOneMenu>
感谢您的帮助。 Empty dropdown list image enter image description here
【问题讨论】:
请出示ManagedBean
的完整代码。
排除显而易见的问题:请再次确认您已在尝试使用<f:selectItems>
标记的同一个Xhtml 文件中正确声明xmlns:f="..."
。有点理智的 IDE 应该已经在那里显示了一条警告线。
您好,感谢您的帮助。好吧,问题不在于标签库或 bean。它在列表函数的初始化中。我通过在托管 bean 类的构造函数中包含列表函数来解决它。这样当构造函数启动时。它还会生成下拉列表。
【参考方案1】:
您使用的是哪个 bean 注释?您说“Managedbeans”,但您发布的源代码并未显示整个 bean,或者是这样吗?检查以确保您没有将旧式 JSF 托管 bean 注释与 CDI 注释混合。
【讨论】:
这不太可能是问题所在。虽然确实效率低下,但默认 JSF 托管 bean 范围以及默认 CDI 托管 bean 范围足以让问题是在初始化时,列表没有被调用。我通过在托管 bean 类的构造函数中包含列表函数来解决它。这样当构造函数启动时。它还会生成下拉列表。
【讨论】:
【参考方案3】:将您的listCountry
转换为
private Map<String, String> listCountry = new HashMap<>();
listCountry.put("India", "India");
listCountry.put("Pakistan", "Pakistan");
listCountry.put("America", "America");
或
private List<SelectItem> listCountry = new ArrayList<>();
listCountry.add(new SelectItem("India", "India"));
listCountry.add(new SelectItem("Pakistan", "Pakistan"));
listCountry.add(new SelectItem("America","America"));
【讨论】:
不,它在我的情况下不起作用。 下次尝试自己重现问题。您会注意到模型的原始代码运行良好(前提是视图的代码是正确的)。以上是关于JSF 中未填充下拉列表的主要内容,如果未能解决你的问题,请参考以下文章
使用angularjs在html中的表格数据单元格上显示下拉列表
如何使用JSF和Javascript在下拉列表选择中动态更新Google Region Chart数据