Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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
Validation “在哪里?”;验证错误:值无效";来自_Validation_Jsf_Primefaces - Fatal编程技术网

Validation “在哪里?”;验证错误:值无效";来自

Validation “在哪里?”;验证错误:值无效";来自,validation,jsf,primefaces,Validation,Jsf,Primefaces,我有一个JSF表单和一个托管bean。提交我的表格后,其中一份输入返回 sendMessage:模板:验证错误:值无效 我相信这些是表单和输入的名称。然而,无论是在JSF页面还是在bean中,我都没有对字段进行任何验证。这怎么可能 以下是相关领域: <p:selectOneMenu id="template" value="#{sendMessageController.template}"> <f:selectItems value

我有一个JSF表单和一个托管bean。提交我的表格后,其中一份输入返回

sendMessage:模板:验证错误:值无效

我相信这些是表单和输入的名称。然而,无论是在JSF页面还是在bean中,我都没有对字段进行任何验证。这怎么可能

以下是相关领域:

<p:selectOneMenu id="template" value="#{sendMessageController.template}">  
                    <f:selectItems value="#{sendMessageController.availableTemplates}"  />
                </p:selectOneMenu>  

以及托管bean:

@ManagedBean(name="sendMessageController")
@RequestScoped
public class SendMessageController {
    ....
    private String template;
    private List<String> availableTemplates = new ArrayList<String>();
@ManagedBean(name=“sendMessageController”)
@请求范围
公共类SendMessageController{
....
私有字符串模板;
private List availableTemplates=new ArrayList();

此验证错误可从正在使用
UISelectOne
/
UISelectMany
组件中识别,例如
。如果在
equals()
上选择的值未返回
true
,请检查任何可用项,则会发生此验证错误

这又有三个可能的原因:

  • 选择项值的
    equals()
    方法缺失或已损坏
  • 在显示和提交表单之间,可用项的列表发生了不兼容的更改
  • 如果涉及任何内容,
    Converter
    getAsObject()
    中返回了错误的项,甚至返回了
    null
  • 另见:

    您可以发布一些代码吗?哪种类型的bean中有值?可能有一些必要的转换失败了。我想我的问题是2。我有两个其他输入,用于计算SelectOne中可用的内容,然后确保它不会发生不兼容的更改。例如,将bean放在视图范围内,或者重新创建相同的l在请求范围bean的(post)构造函数中。如果需要一些额外的参数,只需传递它们。调试显示问题是在提交后调用postconstruct,此时用于获取availableTemplates的其他字段的值为null(即使用户已在页面中填充)因此,我无法重置availableTemplates。我不明白这是为什么,因为我已经调用了web服务来获取这些值,所以我宁愿避免再次这样做。这是因为您的bean是请求范围。每个HTTP请求在逻辑上都创建了一个新的bean实例。显示表单将计为一个HTTP请求。每个ajax请求都计作为一个HTTP请求。提交表单算作一个HTTP请求。HTTP就是这样工作的。同样,正如建议的,将bean放在视图范围内,以便在与同一表单交互时保持实例的活动状态。另请参见doh。当然,它应该是会话范围。