Java getNewValue()没有从JSF2中的下拉列表返回正确的字符串值
我对附加到下拉列表的ValueChangeListener有问题 代码如下:Java getNewValue()没有从JSF2中的下拉列表返回正确的字符串值,java,jsf,Java,Jsf,我对附加到下拉列表的ValueChangeListener有问题 代码如下: <h:selectOneMenu value = "#{MultiFileSelectMgmtBean.selectedLocationName}" valueChangeListener = "#{MultiFileSelectMgmtBean.LocationChangeEvent}" onchange = "submit();" > <f:selectItems value = "#
<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可能有什么问题 下拉列表的提交值是选项值,而不是您认为的选项标签。请注意,该方法也称为getNewValue,而不是getNewLabel。HTML表单submit不会通过HTTP将选项标签从客户端发送到服务器。无法从HTTP请求中提取它们 如果由于某些不清楚的原因确实需要选项标签而不是选项值,则在创建选择项时需要使用它而不是选项值,或者需要在某个位置具有与选项值关联的所有选项标签的映射,以便可以通过此映射中的值获取标签。很有可能您的bean中已经有了这种映射,否则您将无法填充值: 另见:
与具体问题无关:a、valueChangeListener和onchange=submit的组合表示您正在使用JSF1.x特定的hack,以实现基于下拉列表的更改填充另一个下拉列表或字段的功能需求。因为您似乎已经在使用JSF2.x,所以我建议您完全忘记这种方法,改用它。上述链接的wiki页面包含一个示例。下拉列表的提交值是选项值,而不是您认为的选项标签。请注意,该方法也称为getNewValue,而不是getNewLabel。HTML表单submit不会通过HTTP将选项标签从客户端发送到服务器。无法从HTTP请求中提取它们 如果由于某些不清楚的原因确实需要选项标签而不是选项值,则在创建选择项时需要使用它而不是选项值,或者需要在某个位置具有与选项值关联的所有选项标签的映射,以便可以通过此映射中的值获取标签。很有可能您的bean中已经有了这种映射,否则您将无法填充值: 另见:
与具体问题无关:a、valueChangeListener和onchange=submit的组合表示您正在使用JSF1.x特定的hack,以实现基于下拉列表的更改填充另一个下拉列表或字段的功能需求。因为您似乎已经在使用JSF2.x,所以我建议您完全忘记这种方法,改用它。aforelinked wiki页面包含一个示例。但是我从一个正常工作的示例复制粘贴了这段代码。六羟甲基三聚氰胺六甲醚。。。有没有可能那个样本中的标签和值是相同的,而我的样本中的标签和值是不同的?我不知道你们在说什么样的样本。但关键的一点是,只发送项目值,而不发送项目标签。如果它们是相同的或者没有标签,那么很明显,您得到的值是label:Thank BalusC。您能解释一下上面的“那么您在创建选择项时需要使用它而不是选项值”吗?我不清楚这个项目是在哪里创建的?但是我从一个正常工作的示例复制粘贴了这个代码。六羟甲基三聚氰胺六甲醚。。。有没有可能那个样本中的标签和值是相同的,而我的样本中的标签和值是不同的?我不知道你们在说什么样的样本。但关键的一点是,只发送项目值,而不发送项目标签。如果它们是相同的或者没有标签,那么很明显,您得到的值是label:Thank BalusC。您能解释一下上面的“那么您在创建选择项时需要使用它而不是选项值”吗?我不清楚这个项目是在哪里创建的?