验证错误:值无效

2023-12-31

我的 p:selectOneMenu 有问题,无论我做什么,我都无法让 JSF 调用 JPA 实体上的 setter。 JSF 验证失败并显示以下消息:

形式:位置:验证错误:值无效

我在同一类型的其他几个类(即连接表类)上进行了此工作,但我一生都无法让这个工作正常工作。

如果有人可以针对此类问题提供一些故障排除/调试技巧,我们将不胜感激。

使用日志语句我已经验证了以下内容:

  1. The Conveter返回正确,非null values.
  2. 我的 JPA 实体中没有 Bean 验证。
  3. 二传手setLocation(Location location)从未被调用过。

这是我能做的最简单的例子,但它根本行不通:

<h:body>
    <h:form id="form">
        <p:messages id="messages" autoUpdate="true" />
        <p:selectOneMenu id="location" value="#{locationStockList.selected.location}" converter="locationConverter">
            <p:ajax event="change" update=":form:lblLocation"/>
            <f:selectItems value="#{locationStockList.locationSelection}"/>
        </p:selectOneMenu>
    </h:form>
</h:body>

转换器:

@FacesConverter(forClass=Location.class, value="locationConverter")
public class LocationConverter implements Converter, Serializable {
    private static final Logger logger = Logger.getLogger(LocationConverter.class.getName());

    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String value) {
        if (value.isEmpty())
            return null;
        try {
            Long id = Long.parseLong(value);
            Location location = ((LocationManagedBean) context.getApplication().getELResolver().getValue(context.getELContext(), null, "location")).find(id);
            logger.log(Level.SEVERE, "Converted {0} to {1}" , new Object[] {value, location});
            return location;
        } catch (NumberFormatException e) {
            return new Location();
        }
    }

    @Override
    public String getAsString(FacesContext context, UIComponent component, Object value) {
        if (value == null || value.toString().isEmpty() || !(value instanceof Location))
            return "";
        return String.valueOf(((Location) value).getId());
    }    
}

控制台输出:

// Getter method
INFO: Current value=ejb.locations.Location[id=null, name=null, latitude=0.0, longitude=0.0] 
// Session Bean
INFO: Finding ejb.locations.Location with id=3 
// Session Bean
INFO: ### Returning : ejb.locations.Location[id=3, name=mdmd, latitude=4.5, longitude=2.3] 
// Converter
SEVERE: Converted 3 to ejb.locations.Location[id=3, name=mdmd, latitude=4.5, longitude=2.3] 
// Getter method -> Where did my selected Location go ??
INFO: Current value=ejb.locations.Location[id=null, name=null, latitude=0.0, longitude=0.0] 

验证失败,并显示消息“form:location: Validation Error: Value is not valid”

此错误归结为所选项目与任何嵌套指定的任何可用选择项目值都不匹配<f:selectItem(s)>处理表单提交请求期间的标记。

作为防止篡改/黑客攻击请求的一部分,JSF 将重申所有可用的选择项值并测试是否selectedItem.equals(availableItem)回报true至少一项可用的物品价值。如果没有一项值匹配,那么您将得到此验证错误。

这个过程基本上如下所示,其中bean.getAvailableItems()虚构地表示可用选择项的整个列表,如定义的<f:selectItem(s)>:

String submittedValue = request.getParameter(component.getClientId());
Converter converter = component.getConverter();
Object selectedItem = (converter != null) ? converter.getAsObject(context, component, submittedValue) : submittedValue;

boolean valid = false;

for (Object availableItem : bean.getAvailableItems()) {
    if (selectedItem.equals(availableItem)) {
        valid = true;
        break;
    }
}

if (!valid) {
    throw new ValidatorException("Validation Error: Value is not valid");
}

那么,基于上述逻辑,这个问题从逻辑上至少可以有以下几个原因:

  1. 可用项目列表中缺少所选项目。
  2. The equals()表示所选项目的类的方法丢失或损坏。
  3. 如果定制Converter涉及,那么它返回了错误的对象getAsObject()。也许甚至是null.

解决方法:

  1. 确保在后续请求期间保留完全相同的列表,特别是在多个级联菜单的情况下。制作豆子@ViewScoped代替@RequestScoped大多数情况下应该修复它。还要确保您没有在 getter 方法中执行业务逻辑<f:selectItem(s)>,而是在@PostConstruct或动作事件(侦听器)方法。如果您依赖特定的请求参数,那么您需要将它们显式存储在@ViewScopedbean,或者在后续请求中重新传递它们,例如<f:param>。也可以看看如何选择合适的bean范围? https://stackoverflow.com/q/7031885
  2. 确保equals()方法实施正确。这已经在标准 Java 类型上完成了,例如java.lang.String, java.lang.Number等,但不一定在自定义对象/bean/实体上。也可以看看执行平等契约的正确方式 https://stackoverflow.com/questions/3181339/right-way-to-implement-equals-contract#3181374。如果您已经在使用String,确保请求字符编码配置正确。如果它包含特殊字符并且 JSF 配置为将输出呈现为 UTF-8,但将输入解释为例如ISO-8859-1,那么就会失败。另请参见 a.o.通过 PrimeFaces 输入组件检索的 Unicode 输入已损坏 https://stackoverflow.com/q/9634230.
  3. 调试/记录您的自定义操作Converter并相应地修复它。有关指南,另请参阅“null Converter”的转换错误设置值 https://stackoverflow.com/q/4734580如果您正在使用java.util.Date作为可用项目<f:convertDateTime>,确保您不会忘记模式中的全职部分。也可以看看来自 f:datetimeConverter 的“验证错误:值无效”错误 https://stackoverflow.com/q/5406700.

也可以看看:

  • Our selectOneMenu维基页面 https://stackoverflow.com/tags/selectonemenu/info
  • 如何从数据库填充 h:selectOneMenu 的选项? https://stackoverflow.com/questions/6848970
  • 在 JSF 中制作多个依赖/级联 selectOneMenu 下拉列表 https://stackoverflow.com/questions/16378099/make-multiple-dependent-cascading-selectonemenu-dropdown-lists-in-jsf

如果有人可以针对此类问题提供一些故障排除/调试技巧,我们将不胜感激。

在这里问一个明确而具体的问题即可。不要问太宽泛的问题;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证错误:值无效 的相关文章

  • 在 JPA 中保留 Java 8 LocalTime

    我的一个实体中有一个 Java 8 LocalTime private final LocalTime departureTime 它是一个带有 Spring Data Rest 的 Spring Boot 1 3 6 应用程序 我使用 J
  • 两种模型,一种是 STI,一种是验证

    假设我有两个表 产品和订单 为了简单起见 假设一次只能购买一种产品 因此没有像 order items 这样的连接表 所以关系是Product有很多订单 Order属于product 因此 product id是Order表中的一个fk 产
  • 表单帖子上的 asp.net mvc 编码

    我在我的 asp net mvc 表单 带有文本区域的 nicedit 中使用富文本编辑器 当我在帖子上提交表单时 因为它不是 html 编码的 我收到以下消息 从客户端检测到潜在危险的 Request Form 值 如何对 post 上的
  • Jpa 复合键可为空列

    我正在使用 Hibernate 的 JPA impl 来对一些表进行建模 我在映射表时遇到问题 没有主键 在 4 列上有唯一索引 其中 3 列可以为空 我尝试破解它并将索引定义为复合 Id 但由于某些列可为空 因此无法正常工作 JPA Hi
  • 在 MATLAB 中验证输入的最佳实践

    在验证 MATLAB 函数中的输入时 什么时候使用 inputParser 比使用断言更好 或者还有其他更好的工具可用吗 我个人发现使用 inputParser 不必要地复杂 对于 Matlab 始终需要检查 3 项内容 存在 类型和范围
  • 我应该在此 JPQL 查询中包含 unique 吗?

    背景 我在 SO 和许多流行博客中看到了关于必要性的多个答案和问题distinctJPQL 中的关键字JOIN FETCH查询和有关PASS DISTINCT THROUGH查询提示 例如 看这两个问题 使用 JPA 和 Hibernate
  • 如何使用 Twitter Bootstrap 弹出窗口进行 jQuery 验证通知?

    我可以使用弹出窗口出现引导程序 http twitter github com bootstrap很容易 我还可以使用标准进行验证jQuery 验证插件 http docs jquery com Plugins Validation or
  • 无法让 PrimeFaces RequestContext.getCurrentInstance().openDialog() 工作

    无法获取 PrimeFacesRequestContext getCurrentInstance openDialog 上班 我直接从 primefaces 展示中提取了示例代码 但我从未打开过对话框 我正在使用在 Wildfly 8 2
  • 添加验证码到 Symfony2 登录

    我需要将验证码添加到我的登录页面 我正在使用 GregwarCaptchaBundle 和 FosUserBundle 目前我已经使用以下代码在登录时显示验证码
  • JSF“总”变量类似于 JSTL 中的 c:set

    我不喜欢 JSF 但我需要用它来解决这个问题 我正在 纯 JSF 中工作 所以这就是我基本上需要的 但我不知道如何用 JSF 来实现它
  • 丰富:数据表行跨度问题

    我需要创建一个 rich dataTable 甚至扩展 具有以下功能 我有一个公司类 其中包含产品对象的集合 我想展示下表 我仍然没有弄清楚如何使用子表执行此操作 在所有示例中 我发现子表具有与主表完全相同的列 据推测 我需要在前两列中使用
  • 如何在 h:outputText 中写入单引号和双引号

    如何在 value 属性中写入单引号和双引号h outputText 这应该适用于标准语法 JSP 和 XML 视图技术
  • 验证以防止角度形式出现重复的形式值

    我有几个表单数组 我需要进行验证 以便每个表单行中的特定字段在所有表单数组中必须是唯一的 如果任何值出现多次 则两个表单字段都必须标记为红色 我设法编写了一个函数 以便如果这些字段有任何更改 该函数将返回 true false 但我不确定如
  • laravel 正则表达式验证不起作用

    我刚刚开始使用 laravel 正在努力验证我的表单之一中的文本区域 文本区域用于用户简介 因此我只想允许使用字母 数字 空格和以下字符 这就是我所拥有的 validator Validator make Input all array b
  • JpaRepository 上的@Transactional

    我正在使用只读数据库将一些数据输入到我的项目中 我们使用带有 jpa 和 hibernate 的 Spring v3 以下注释是否会使对我的存储库的所有调用成为只读事务 或者我是否需要调用存储库的服务层上的注释 package com bl
  • JPA - 从一列中获取不同的价值

    我有一个只有几个字段的实体 其中之一是城市名称 现在我想从该表中获取所有不同城市的列表 我怎样才能存档它 我尝试使用 DISTINCT 关键字 但它不起作用 我使用 Hibernate 作为 JPA 提供程序 但我想在纯 JPA 查询中获取
  • 多步ActiveRecord的模型验证

    考虑具有以下字段的用户模型 名字 必填 姓氏 必填 电子邮件 必填 要求输入密码 电话 必填 大小 10 位数字 地址 必填 以及包含以下步骤的多步骤注册表单 第一步 包含 名字 姓氏 和 电子邮件 字段 第二步输入密码 电话和地址 您将如
  • 服务器端文件验证在 Yii.2.0 中不起作用

    Is the FileValidatorYii2 中的类只支持客户端验证 我使用代码编写了文件上传系统 在模型中 public function rules return allAllowedFileType safe allAllowed
  • JPA Criteria API group_concat 用法

    我目前正在编写一份报告 其中一个字段需要 group concat CriteriaQuery
  • XStream 中的自定义转换器

    我正在使用 XStream 将对象序列化为 XML 格式 我得到的格式化xml如下 node1 node2 node 3是pojo的属性 DetailDollars 我有一个要求 我必须计算一个百分比 例如 100 25 并将新节点添加到现

随机推荐

  • 将 json 对象解析为字符串

    我有一个关于我正在构建的 Web 应用程序的问题 其中我有一个接收 json 字符串的 REST 服务 Json 字符串类似于 string value string value object string value string val
  • 呈现 UIAlertController 时应用程序崩溃[重复]

    这个问题在这里已经有答案了 我的应用程序在尝试呈现时崩溃了UIAlertController 我有一个UIViewController以模态方式呈现 然后在所呈现的视图控制器上 当点击某个按钮时 我想呈现一个actionSheet aler
  • Unity 构建项目游戏 2d 到 apk,因为纹理尺寸巨大

    我有一个项目 Unity 游戏 2d 当我用 70 MB 的 apk 构建它时 我认为它对于我的游戏来说太大了 我尝试删除文件夹 Assets Resources 中大约 6MB 的一些图片 游戏背景纹理 因为我的游戏根据当前级别动态加载资
  • 使用默认参数作为模板类型的函数

    我正在尝试使用带有默认参数的函数作为函数指针模板参数 template
  • 如何使用 ASP.Net 将 Rtf 转换为文本?

    如何使用 ASP Net 将 RTF 转换为文本格式 您有关于MSDN http msdn microsoft com en us library cc488002 aspx In C class ConvertFromRTF static
  • 使用 OAuth 保护我的 REST API,同时仍然允许通过第三方 OAuth 提供商进行身份验证(使用 DotNetOpenAuth)

    我有一个带有简单 REST API 的产品 以便该产品的用户可以直接集成该产品的功能 而无需使用我的 Web 用户界面 最近 各个第三方都对我感兴趣 希望将他们的桌面客户端与 API 集成 以允许我的产品的用户使用该第三方应用程序访问他们的
  • 如何在处理多个文件时组织 Vim 缓冲区、窗口和选项卡

    我一生都在使用 VIM 但最近我有点厌倦了它 因为在一个大项目 有 500k LOC 和数百个文件 中同时处理 20 个左右的文件时 我迷失在缓冲区 窗口和选项卡中 每当我这样做 make grep等等 新的缓冲区在当前窗口中跳出 标签也会
  • 使用 JobStoreTX 配置 CronTriggerFactoryBean 以实现quartz集群

    我们使用的是 Quartz 2 1 5 我们设置了以下属性 org quartz jobStore class org quartz impl jdbcjobstore JobStoreTX org quartz jobStore driv
  • 当(当前)只有一个类实现接口时,您是否应该创建一个接口?

    如果有可能有其他东西可以使用它 您是否应该始终创建一个接口 或者等到实际需要它然后重构以使用接口 对接口进行编程通常看起来是合理的建议 但 YAGNI 我想也许这要视情况而定 现在我有一个代表可以包含食谱或其他文件夹的文件夹的对象 我不应该
  • ARM NEON SIMD 版本 2

    Cortex A15 中的 NEON SIMD 和 NEON SIMD 版本 2 有什么区别 它添加了 SIMD FMA 指令 VFMA F32 并且还强制要求 NEON 半精度扩展 ARM Cortex A7 ARM Cortex A15
  • HTTPS nonProxyHosts 的 JVM 参数

    所以我有一个相当加载的环境变量 JAVA OPTIONS export JAVA OPTIONS Dhttp proxyHost my proxy com Dhttp proxyPort 1080 Dhttps proxyHost my p
  • Python Eve:请求的资源上不存在“Access-Control-Allow-Origin”标头

    我使用Python EVE框架编写了一个API 当尝试从 AngularJS 应用程序访问 API 时 它显示错误 如下所示 XMLHttpRequest cannot load http 127 0 0 1 5000 user jay3d
  • 创建未知大小的稀疏矩阵

    例如 我有一个文本文件 其中每一行都指示图形上的一条边 2 5 1 表示节点 2 和 5 之间权重为 1 的边 我想使用这些元组创建一个稀疏邻接矩阵 通常 我会将稀疏矩阵初始化为 G scipy sparse lil matrix n n
  • const char* 的奇怪 std::cout 行为

    我有一个方法返回一个字符串以显示为错误消息 根据程序中发生此错误的位置 我可能会在显示错误消息之前添加更多解释 string errorMessage return this is an error somewhere in the pro
  • 在 Java 面板中包含命令提示符

    我有一个批处理文件 可以从 SVN 中检出代码并对其调用几个命令 这发生在 Windows 命令提示符上 我想从我的 java 程序调用这个批处理文件 并且命令提示符必须出现在我的应用程序窗口的控制台中 而不是作为单独的窗口 这样我就可以从
  • 如何在图像周围添加图像边框?

    有没有简单的方法可以在图像周围添加图像边框 原因是我想在图像周围创建阴影效果 图像作为缩略图加载 大小为 110x75 像素 我正在考虑创建阴影边框 但不知道如何将其添加到图像周围 有人知道方法吗 最好是PHP 您可以使用 GD 库或 Im
  • 我的应用程序中的 ic_launcher 图标错误

    我正在开发一个应用程序Honeycomb并遇到了这个非常奇怪的问题 我更改了应用程序图标 ic launcher 在每一个drawable文件夹并确保它在清单中正确 但我有一个标准 settings 启动器中的图标 在应用程序本身中是正确的
  • SVG 圆中 dasharray 属性的奇怪行为

    我正在尝试创建 SVG 圆的无限动画循环 我想创建 12 个相等的块 并将它们分开一些间隙 为了计算我使用的圆片的价值k系数见下表 所以我做了 0 25782 160 我的圆的直径 我得到 41 2512 它应该是我的棋子的值 之后我创建了
  • 获取正在运行的进程的维度

    我正在尝试抓取应用程序中特定 x y 位置的屏幕截图 有没有办法在 Process 对象中获取正在运行的应用程序 然后获取它的尺寸 就像是 Process processlist Process GetProcesses foreach P
  • 验证错误:值无效

    我的 p selectOneMenu 有问题 无论我做什么 我都无法让 JSF 调用 JPA 实体上的 setter JSF 验证失败并显示以下消息 形式 位置 验证错误 值无效 我在同一类型的其他几个类 即连接表类 上进行了此工作 但我一