Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getNewValue()没有从JSF2中的下拉列表返回正确的字符串值_Java_Jsf - Fatal编程技术网

Java getNewValue()没有从JSF2中的下拉列表返回正确的字符串值

Java getNewValue()没有从JSF2中的下拉列表返回正确的字符串值,java,jsf,Java,Jsf,我对附加到下拉列表的ValueChangeListener有问题 代码如下: <h:selectOneMenu value = "#{MultiFileSelectMgmtBean.selectedLocationName}" valueChangeListener = "#{MultiFileSelectMgmtBean.LocationChangeEvent}" onchange = "submit();" > <f:selectItems value = "#

我对附加到下拉列表的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可能有什么问题

下拉列表的提交值是选项值,而不是您认为的选项标签。请注意,该方法也称为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。您能解释一下上面的“那么您在创建选择项时需要使用它而不是选项值”吗?我不清楚这个项目是在哪里创建的?