就在我以为我已经明白的时候...*叹息*
<h:inputText value="#{testBean.text}" required="true" />
<h:commandButton actionListener="#{testBean.doFoo}" value="Do Foo" />
<h:commandButton immediate="true" actionListener="#{testBean.doBar}" value="Do Bar" /><br />
<h:outputText value="#{testBean.didSomething}" />
public class TestBean {
private String didSomething = "Nothing done yet";
// + getter
public void doFoo() {
didSomething = "Did foo!";
}
public void doBar() {
didSomething = "Did bar!";
}
从我读到的关于立即的所有信息来看,我希望有以下几点:
>
当尝试执行foo而不为输入字段提供值时,不会执行该操作,因为在ProcessValidationsPhase
期间发生错误,导致在此阶段之后直接重新呈现页面并显示错误消息。DidSomething
的值保持不变。(按预期工作)
当尝试do bar而不为输入字段提供值时,由于immediate属性,该操作将在applyRequestValuesPhase
期间执行。变量DidSomething
已更改。(按预期工作)
“null返回值(作为action方法的结果)会导致处理正常继续,即验证非立即组件,然后执行update-model(如果没有发生验证错误)。对于返回void的action侦听器方法,需要调用FacesContext.RenderResponse();如果不需要正常流。”
由此,我产生了这样的想法,即处理继续正常(因为我的action方法既不返回结果,也不强制renderresponse()
),从而导致相同的验证错误。唯一的区别是它发生在设置didsomething
之后。然而,这种情况并不发生。相反,它感觉站点仍然跳过所有剩余的阶段,输入字段没有被触摸。它重新呈现时不会出现错误消息。
谁能给我解释一下,我对这个工作原理的理解哪里出了问题?
按钮上有immediate=“true”
时,在apply request values阶段确实会调用该操作,并且会跳过所有剩余的阶段。这也是该属性的唯一要点:在apply request values阶段立即处理(解码、验证、更新和调用)组件。
所有没有immediate=“true”
的输入都将被忽略。只有具有immediate=“true”
的输入才会被处理,但在apply request values阶段也会发生这种情况。如果apply request values阶段已经发生了一切,为什么还要调用其余的阶段?
在Debug JSF lifecycle文章中,您可以找到以下摘要,它将启发您何时(不)使用立即“true”
:
如果还不完全清楚,这里有一个总结,并提供了一些有用的实际应用示例:
>
如果仅在UIInput
(s)中设置,则进程验证阶段将改为在apply request values阶段进行。使用此方法可以确定有问题的UIInput
组件的验证优先级。当任何一个组件的验证/转换失败时,非直接组件将不会被验证/转换。
如果仅在UICommand
中设置,则将跳过任何UIInput
组件的“应用请求值”阶段直至“使用更新模型值”阶段。使用此选项可跳过窗体的整个处理过程。例如。“取消”或“后退”按钮。
如果在UIInput
和UICommand
组件中同时设置,则对于任何未设置此属性的UIInput
组件,将跳过“应用请求值”阶段直至“更新模型值”阶段。使用此选项可以跳过整个表单的处理,对某些字段(带有immediate)除外。例如。“忘记密码”按钮,该按钮具有必填但非即时密码字段。
我目前正在系统中使用JwtSecurityToken类。标识模型。令牌命名空间。我使用以下内容创建令牌: 出于某种原因,即使过期时间设置为当前时间后10秒,当令牌被验证到大约5分钟时,它实际上不会引发异常。看到这个后,我想可能有5分钟的最低过期时间,所以我将过期时间设置为: 然后,它将在10分钟后过期,但异常消息表示过期时间设置为应该的时间(用户登录后5分钟),当它在异常中显示当前时间时,则为过期
问题内容: 我莫名其妙地迷糊了自己。 不知何故,我想到用AJAX(如$ .post)打PHP时,您必须回显“ true”或“ false”,而不是返回true / false。我现在知道不是这种情况,但是有人可以为我分解吗? 测试布尔值是否存在问题?像这儿 那是有问题的情况,对吗?在这里,我不能返回true / false,而是必须回显一个字符串并测试该字符串,是吗? 但是我看到布尔true /
有没有人遇到过使用场景?由于是默认选项,我看不到你什么时候会使用它。
在eclipse中,它将始终运行测试
我已阅读文档。但我仍然不确定何时不需要将其设置为 。在下面的代码中,如果我将其设置为 ,我根本看不到标头。如果我把它留,那么一切都很好。 以下视图调试层次结构将发出警告“宽度和位置不明确”。 我想每当我需要修改代码中的任何内容时,我都必须将设置为。 也许更正确的说法是,如果您需要删除它的所有约束,然后将其设置为< code>false,然后添加您喜欢的内容,在这种情况下,您需要为所有4条边添加约束
问题内容: 我已经阅读了文档。但我仍然不确定何时不需要将其设置为。在下面的代码中,如果将其设置为,则根本看不到标题。如果我将其保留为,那么一切都很好。 View调试层次结构中的以下内容将给出警告“ 宽度 和 位置 不明确”。 我以为只要需要修改代码中的任何内容,都必须设置为。 如果您需要删除其所有约束,然后将其设置为,然后添加所需的内容,则可能是更正确的说法,在这种情况下,您需要为所有四个方面添加