当前位置: 首页 > 面试题库 >

在客户端中删除输入时,跳过验证程序–这是否符合JSF规范?

帅雅逸
2023-03-14
问题内容

__ 我有一个页面,其中输入文本组件标记为required=”true”,并且Validator在服务器端具有自定义。

现在,作为客户端,我提交的页面没有该组件呈现的HTML元素(这可以通过使用浏览器的内置DOM元素检查器从DOM树中删除该元素来轻松实现)。表单已成功提交,而无需服务器端验证此必需组件。

这是根据JSF规范吗?有没有一种方法可以指定要执行页面中的验证器,即使发布的页面中不包含验证器也是如此?


问题答案:

这确实符合规范。以下是UIInput#validate()javadoc(重点是我的)的相关摘录:

使用检索提交的值getSubmittedValue()。如果返回null,并且ALWAYS_PERFORM_VALIDATION_WHEN_REQUIRED_IS_TRUEcontext-param的值为true(忽略大小写),请检查“ required”属性的值。如果“ required”的值为true,则继续执行以下操作。如果“ required”的值为false或未设置required属性,请退出而不进行进一步处理。如果未设置context-param或将其设置为false(忽略大小写),请退出而不进行进一步处理。(这表明没有为此组件提交任何值。)

空输入将发送空字符串,而不是null。完全不输入将发送null,而不是空字符串。

因此,您可以通过添加以下上下文参数来禁用观察到的行为:

<context-param>
    <param-name>javax.faces.ALWAYS_PERFORM_VALIDATION_WHEN_REQUIRED_IS_TRUE</param-name>
    <param-value>true</param-value>
</context-param>

请注意,此上下文参数是自JSF 2.3起新增的,并已反向移植到Mojarra 2.2.16、2.1.29-10和1.2_15-06中。在旧版本中不支持。另请参见JSFSPEC-1433和有关此问题的专家组讨论。

这是否有害取决于业务逻辑。如果设计得当的模型(业务逻辑和/或数据模型)不符合null预期的情况,则会在其他地方导致空指针异常或SQL约束违反(NOT NULL),通常会导致HTTP 500错误响应。但是,如果模型实际上将其null视为预期情况,则很可能是模型中的错误。旨在仅呈现模型的视图(JSF页面)然后可能对此没有多大作用。

如果确实不能更改业务逻辑或数据模型以将其视为null例外情况(即,永远不要假设/接受给定的值作为null),而您碰巧使用了JPA,那么最好的选择是@NotNull在属性上添加一个。尽管JSF将绕过其验证,但JPA仍将对其进行验证,从而仍然导致异常和HTTP 500错误。在这种情况下,我只想知道为什么DB列首先没有NOT NULL约束。或者,进行类级别验证。

应该注意的是,MyFaces会在下面记录如下警告:

2016年3月16日,上午8:55:52 org.apache.myfaces.shared.renderkit.html.HtmlRendererUtils encodedecryptInputInput
警告:如果呈现了输入,呈递了其形式且未提交,则输入应始终有一个提交值最初被禁用或只读。您无法通过javascript禁用输入元素后提交表单。在提交表单之前,请考虑将只读设置为true或将禁用的值重置为false。
组件:{Component-Path:[类:javax.faces.component.UIViewRoot,ViewId:/test.xhtml] [类:javax.faces.component.html.HtmlBody,Id:j_id_5] [类:javax.faces.component .html.HtmlForm,Id:j_id_6] [类:javax.faces.component.html.HtmlInputText,Id:j_id_7]位置:/test.xhtml,第22行和第33列}



 类似资料:
  • 我的页面中有h: selectOneMenu组件。用户必须在那里选择“是”或“否”,初始值为null(标记为“未知”)。在bean中它是布尔值,因此可以为null。如果用户选择了有效值,例如“是”,则点击Next,保存在bean中。 现在用户可以返回此页面,并选择“未知”,这不是一个有效的值。当用户现在点击下一步时,会显示错误消息。可以,但值会更改为“是”。它从bean更新。这样它会更改用户输入的

  • type String - clientCertificate. origin String - 必须从缓存中删除相关客户端证书的服务器的来源。

  • 在试图使Do/While循环工作时,我很难找到正确的语法。我想用C语言编写一个计算器,让用户输入一个字符串,然后它做它的事情并打印结果,询问用户是否想再去一次。 到目前为止,我有一个简单的main函数,只是为了让Do/While循环正确,但是当我输入Y或Y时,程序只是问我是否想再次继续,它没有给我再次运行“计算器”部分的机会。我做错了什么?

  • 因此,为了实现这个逻辑,我认为我需要在客户端验证JWT令牌。Q1,这是一个明智的做法吗。 Q2,我正在使用的库似乎需要一个公钥才能使用它的函数。我似乎没有公钥,只有一个秘密,这是我刚刚编造的,所以它不是用一对生成的。我的公钥从何而来,或者是否有另一种方法来验证我的令牌而不使用此方法? 这一切似乎应该是显而易见的,我错过了一些东西,所以很抱歉,如果这是一个愚蠢的问题,但我似乎找不到答案?

  • 问题内容: 因此,我几乎搜索了单词“ string”,“ python”,“ validate”,“ user input”等等的每个排列,但是我还没有找到一种适合我的解决方案。 我的目标是提示用户是否要使用字符串“ yes”和“ no”进行另一笔交易,我认为字符串比较在Python中是一个相当简单的过程,但是有些不起作用对。我使用的是Python 3.X,据我所知,输入应使用字符串而不使用原始输

  • 这是我刚接触Python时就一直在阅读的一本书中的一些代码……这一部分按它应该的方式工作 我的困境是…我需要验证输入是什么…因此,如果用户输入的是一个字符串(比如“五”而不是数字),而不是q或数字,它会告诉他们“很抱歉,“五”是无效的。请重试…然后它会再次提示用户输入。我是Python新手,一直在为这个简单的问题绞尽脑汁 *更新**因为我没有足够的积分来为我自己的问题添加答案,所以我在这里发布这个