- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
更新:现在再次更新。我认为我之前的分析是错误的,因为我现在已经能够为此创建一个示例。它似乎与复合组件和 insertChildren 标签有关。
这是我的小脸:
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:form="http://java.sun.com/jsf/composite/composite/form"
xmlns:ui="http://java.sun.com/jsf/facelets">
<h:head></h:head>
<h:body>
<h:form>
<form:workspace>
<h:inputText id="email" value="#{user.email}" size="45"
required="true" requiredMessage="Required">
<f:validateRegex pattern="([^.@]+)(\.[^.@]+)*@([^.@]+\.)+([^.@]+)" />
</h:inputText>
<h:message for="email" />
<br />
<h:commandButton action="#{user.update}" value="Update"/>
</form:workspace>
</h:form>
</h:body>
</html>
form:workspace复合组件定义如下:
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:cc="http://java.sun.com/jsf/composite">
<cc:interface>
</cc:interface>
<cc:implementation>
<cc:insertChildren/>
</cc:implementation>
</html>
#{user}
变量引用一个简单的 bean,它只有一个名为 email 的字段以及一个 getter 和一个 setter。 update 方法什么都不做。
我得到的行为如下所述。当我输入无效值时,它会恢复为存储在 bean 中的值。如果我删除 form:workspace 组件的包装,它会像我预期的那样工作——该值不会被还原。 JSF 错误?
我有一个包含多个输入组件的 JSF 表单。其中一些附有 validator 。例如,一个简单的是电子邮件地址,这是强制性的:
<h:inputText id="email" value="#{profile.user.email}" size="45"
required="true" requiredMessage="Required">
现在,我们收到了一项要求,即无效字段应在其中保留提交的值,这样用户就不会因为简单的拼写错误而重新输入大量文本。这对我来说似乎很合理,我什至希望这是验证的默认行为。但它似乎不是 - 该值恢复到之前的状态(当它仍然有效时)。
问题是,我什至找不到行为应该是什么的引用。我在某处读到它是验证后显示的 UIInput 的本地值。检查 UIInput 的代码告诉我,如果验证失败,则有意不设置本地值。但这似乎不是全部事实,因为所有输入字段都已还原 - 不仅仅是验证失败的字段!所以它看起来更像是再次从模型中获取值。
无论如何,我有办法避免这种行为吗?
我正在使用 JSF 2.0.4-b09。我觉得我错过了一些明显的东西。
编辑:我将电子邮件验证程序更改为下面发布的 BalusC 正则表达式,我仍然得到相同的行为。我张贴了一张说明问题的图片。图像的上半部分显示了表单的初始状态。然后中间部分显示我更改了字段“First name”、“Last name”和“Email”。底部显示了我单击保存按钮后的结果。如您所见,电子邮件字段已还原。不仅如此,名字和姓氏字段也被还原。
最佳答案
有些困惑正在发生。只有当提交的值为空(即用户删除了初始值或什么都不输入)时,该值才会恢复为初始值。我不确定必须重新输入整个文本的问题与此有何关系,因为实际上没有输入任何内容。
当提交的值为空或null
时, JSF 将只重新显示模型值,否则它将重新显示提交的值,正如您所期望的那样。这是在 JSF 规范中指定的。自己看吧,加个例子
<f:validateRegex pattern="([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)" />
到电子邮件输入字段。如果电子邮件格式无效,您会看到任何非空 (!) 提交的值都会保留。
更新:根据您的更新,事实证明您的输入组件实际上是由 <cc:insertChildren>
呈现的.这种行为确实是 Mojarra 中的一个错误。参见 issue 1991 .如问题单中所述,解决方法是将 <cc:insertChildren />
在 <h:panelGroup>
里面或 <ui:fragment>
.
<cc:implementation>
<ui:fragment>
<cc:insertChildren/>
</ui:fragment>
</cc:implementation>
MyFaces 2.1.1 没有这个错误,在那里工作正常。
关于java - cc :insertChildren are not redisplayed after validation failure 内的 UIInput 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7310286/
我试图找到使用这行代码的原因 var cc = cc = cc || {}; 在 Cocos2D JavaScript 库中,例如 this地方,但我找不到任何合理的理由。就设置默认值而言,单一赋值是
我的 make 文件中有这些行: ifeq ($(SYSTEM),SOLARIS) # SUN Solaris 8 no c99 ifeq ($(OSVER),510)
服务器详细信息 MySQL 5.6.22 256GB 内存 4TB 固态硬盘 32 核 背景信息 有一个删除进程,每秒大约执行 3 次删除。每秒 2-3k QPS。主要是 SELECT。没有长时间运行
我正在 Spring 的帮助下发送邮件,其中我想要 CC 中的多个电子邮件 ID,所有人都会收到邮件,但问题是当他们在rackspace(apps.rackspace.com)中打开电子邮件时,它只显
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我有一个生成文件。当我在 Unix 上运行它时,我得到这个错误: cc -I/opt/oracle/product/9.2.0/rdbms/demo -I/opt/oracle/product/9.2
直观的逻辑,具有 build 性,是函数式编程中类型系统的基础。经典逻辑不是 build 性的,尤其是排中律 A ∨ ¬A(或其等价物,例如 double negation elimination 或
我必须使用我之前创建的列表文件在 C++ 中编写一个队列,并且我很难编译所有内容。 我目前遇到的问题是,当我编译时出现错误: Queue.h:7:2: 错误:'List' 没有命名类型 如何正确连接队
使用支持延续的语言,例如Scheme、Ruby 和 Haskell,假设有一个函数 cc' 不带参数并返回当前延续,以便通过调用 cc' 获得延续的调用者然后可以随心所欲地在任何地方调用延续。 cc'
我有一个 InDesign 文档,其中包含不同宽度尺寸的页面。现在我想用 JS 脚本添加垂直指南。因此我必须添加 pageWidth + pageWidth (特定页面的)。 但我只知道如何获取文档尺
像这样,我有一个对象: { 'person': { 'like': { 'color': 'red', 'food': 'rice' }, 'nam
我知道我可以用: string input = "AA,BB,CC"; string output = ""; foreach (var item in
我正在尝试使用我使用 Label-img 标记的样本来训练对象检测算法。我的图像尺寸为 1100 x 1100 像素。我使用的算法是在 TensorFlow 2 Detection Model Zoo
我正在尝试学习 C,并且刚刚开始阅读“艰难地学习 C”这本书。在第二课中,作者提到了 Makefiles,并指出当使用命令“make example.c”时,“make”会自动调用 cc 来构建 .c
在我的主要方法的一开始,我就有了 main(int argc, char *argv[]){ if(argc!=2){ printf("not enough arguments"); ex
因此,我有一个 c 模块,其中我修改了两件事:向函数添加了一个参数,向结构体添加了一个参数。 问题是,当使用 cc 进行编译时(从我继承的脚本),无论我的更改在哪里,我都会收到错误消息(抱歉,如果翻译
我浪费了很多时间来弄清楚为什么一种算法应该比另一种算法更有效,然而,就速度而言,另一种算法却完全相同。我做了这些操作:我在一个单独的终端窗口中编译了第一个源代码;而第二个源代码在另一个窗口中。我只是用
多次按 Tab 不会将文本向右移动。有没有办法让它表现得像 Visual Studio 的智能缩进?第一个制表符缩进,随后的制表符将文本移动到下一个制表位。谢谢你。 最佳答案 像这样的东西? (def
如果我使用 C 编译器 cc,则命令行完成不起作用。如果我输入 cc dig + press tab 那么什么都不会发生,但是如果我用 cc digenv.c 编译程序,那么它就可以工作。为什么 cc
有人对它的工作原理有很好的指导吗?带有视觉辅助的东西会很好,我遇到的每个指南似乎都在说我需要重新尝试的同一件事。 最佳答案 这是留在CS实验室白板上的图。因此,您将要获取一些苹果,然后在开始操作之前先
我是一名优秀的程序员,十分优秀!