gpt4 book ai didi

java - ValueChangeEvent.getNewValue() 未从 JSF 2 中的下拉列表中返回正确的字符串值

转载 作者:行者123 更新时间:2023-12-02 00:27:03 24 4
gpt4 key购买 nike

我在附加到下拉列表的 ValueChangeListener 时遇到问题。

这是代码:

<h:selectOneMenu 
value = "#{MultiFileSelectMgmtBean.selectedLocationName}"
valueChangeListener = "#{MultiFileSelectMgmtBean.LocationChangeEvent}"
onchange = "submit();"
>

<f:selectItems
value = "#{MultiFileSelectMgmtBean.locationsListItems}">
</f:selectItems>

</h:selectOneMenu>

这是支持 bean:

protected List<SelectItem> locationsListItems;
...

public void LocationChangeEvent( ValueChangeEvent vce ) throws Exception
{
selectedLocationName = (String) vce.getNewValue();
}

问题是“selectedLocationName”获取“11”或“13”值,即使下拉列表中填充了两个字符串“LocationTest1”和“LocationTest2”。

vce.getNewValue 可能存在什么问题?

最佳答案

下拉列表的提交值是选项value,而不是您想象的选项label。请注意,该方法也称为 getNewValue() ,不是getNewLabel() 。选项标签通过 HTML 表单提交通过 HTTP 从客户端发送到服务器。无法从 HTTP 请求中提取它们。

如果由于某些不清楚的原因您确实需要选项标签而不是选项值,那么您要么需要在创建选择项时使用它而不是选项值,要么需要映射与选项值在某处,以便您可以通过此映射中的值获取标签。很有可能您的 bean 中已经有这种映射,否则您将无法填充 <f:selectItems>值:)

另请参阅:

<小时/>

与具体问题无关: <h:selectOneMenu> 的组合,一个valueChangeListeneronchange="submit()"表示您正在使用 JSF 1.x 特定的 hack 来实现根据下拉列表的更改填充另一个下拉列表或字段的功能要求。由于您似乎已经在使用 JSF 2.x,我建议您完全忘记这种方法,只使用 <f:ajax listener>反而。上述链接的 wiki 页面包含一个示例。

关于java - ValueChangeEvent.getNewValue() 未从 JSF 2 中的下拉列表中返回正确的字符串值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9777353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com