标签: immediate-attribute

JSF跳过Required-Validation而不是immediate = true

我有多种形式,我有必填字段和可选字段.

提交这样的表单,我需要对要执行的required属性进行验证,这样可以正常工作.要取消这样的形式我使用属性immediate="true"p:commandbutton,这使得在其作用发生应用请求值 -PHASE如下处理:点击一个特定的按钮时如何跳过验证?

但是,对于大型表单,我想为用户提供一个Save-Button,以便他可以稍后继续.

为了保存当前状态,我还想忽略required-attribute的验证.但是,使用immediate="true"不起作用,因为那时我的save方法简单保存,因为JSF生命周期永远不会命中"UpdateModelValues"-Phase.(根据http://www.javacodegeeks.com/2012/01/jsf-and-immediate-attribute-command.html)

那么,如何绕过所需的检查但不跳过生命周期的一半?

validation lifecycle jsf immediate-attribute

42
推荐指数
3
解决办法
5万
查看次数

尝试理解立即="真实"跳过输入,而不应该

就在我以为我立即理解的时候...*叹气*

考虑以下JSF页面:

<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}" />
Run Code Online (Sandbox Code Playgroud)

而这个支持bean:

public class TestBean {
   private String didSomething = "Nothing done yet";
   // + getter

public void doFoo() {
    didSomething = "Did foo!";        
}

public void doBar() {
    didSomething = "Did bar!";        
}
Run Code Online (Sandbox Code Playgroud)

从我所读到的所有内容中我可以期待以下内容:

  • 当在没有为输入字段提供值的情况下尝试执行foo时,操作永远不会执行,因为在processValidationsPhase发生错误期间,导致在此阶段之后直接重新呈现页面并显示错误消息.didSomething保持不变的价值.(这按预期工作)

  • 当在没有为输入字段提供值的情况下尝试执行bar时,applyRequestValuesPhase由于immediate属性而执行该操作.变量didSomething已更改.(这按预期工作)

接下来会发生什么,这个描述说明:

"null返回值(作为action方法的结果)导致处理继续正常进行,即验证非立即组件然后执行update-model(如果没有发生验证错误).对于返回void的动作侦听器方法,有必要调用facesContext.renderResponse();如果不需要正常流程."

由此我开始认为处理继续正常进行(因为我的动作方法既不返回结果也不返回力renderResponse()),导致相同的验证错误.唯一的区别是它设置发生didSomething.但是,这不会发生.相反,感觉网站仍然会跳过所有剩余的阶段,输入字段未被触及.它重新呈现没有错误消息. …

jsf commandbutton immediate-attribute

23
推荐指数
1
解决办法
4万
查看次数

调试JSF生命周期 - 每个阶段到底发生了什么

我已经决定完全深入研究JSF 2.0,因为我的项目需要深入了解它.我正在阅读JSF Lifecyle Debug,这是一篇关于JSF生命周期的精彩文章.在阅读本文时,我有以下混淆.

  1. 如果是初始请求,Restore View Phase则会在空视图中创建并直接Render Response Phase发生.此时没有可以保存的州.render response phase那时究竟发生了什么?我在运行这个例子时感到很困惑.

  2. 该文章指出,检索输入值被设置在inputComponent.setSubmittedValue()Apply Request Values相位.如果验证和转换通过,则设置值inputComponent.setValue(value)inputComponent.setSubmittedValue(null)运行.在同一篇文章中指出,现在如果在下一个回发请求中,值被更改,则将其与提交的值进行比较,该值在每个帖子后面将始终为null,alue change listener将调用v .这意味着,如果,我们不更改值,因为submittedValue将为null,将始终调用valueChangeListener?我对此声明感到困惑.有人可以详细说明吗?

  3. 文章陈述了immediate属性的用法.如果immediate在输入组件上设置了属性,则理想情况下Process Validation Phase会跳过该属性,但会进行所有转换和验证Apply Request Values.我的观点是,仍然在转换和验证发生时,跳过第三阶段的优势是什么?

  4. 该术语检索值的含义是什么?

  5. 我想知道,如果让我们说视图上有五个字段.JSF是否列出了这些值的某些集合,Apply Request ValuesProcess Validations逐步对它们进行迭代?

  6. 在本文的最后一点说明,何时使用immediate属性.根据我的理解,如果在输入组件和命令组件中都设置了immediate属性,那么对于没有的任何属性,它将跳过从Apply Request Values to Invoke Application的阶段immediate.那么最后一个语句在登录表单中是什么意思是"忘记密码"按钮,其中包含必需的即时用户名字段和必需但非直接的密码字段.

我知道这些是非常基本的混淆,但这些主题的明确性肯定有助于提高JSF知识.

lifecycle jsf phase jsf-2 immediate-attribute

10
推荐指数
1
解决办法
3576
查看次数

在处理AJAXified JSF 2.0组件时,是否应该立即使用immediate ="true"?

如果immediate="true"有一个支持Ajax JSF 2.0组件打交道时从来没有被使用?

示例可能是:

如果我想在JSF 2.0页面上实现"取消"按钮,如果用户点击"取消",则不应运行任何验证,immediate="true"如果组件是ajaxified组件,或者应该指定表单上没有组件应该被处理?如果是这样,使用组件的AJAXified功能而不是使用的"旧方法"实现此功能的方法是immediate="true"什么?

ajax jsf jsf-2 immediate-attribute

9
推荐指数
1
解决办法
5319
查看次数

JSF数据表:添加和删除行清除行值

我有啊:数据表显示行列表,每行的字段是输入字段.

我在表格前面渲染一个"添加行"按钮,在表格的每一行上都有一个"删除行"按钮.

烘焙bean是viewScoped,按钮添加/删除辅助bean中java列表中的元素,然后返回到同一视图.

我在按钮中将immediate属性设置为"true",以便在添加或删除行时不验证输入字段.

一切正常但只有一件事:输入文件的值被清除.我认为视图保持值,因为bean是viewScoped.

如何在不触发验证的情况下实现添加/删除行,并保留用户在表单中键入的值?

我的看法:

<h:form>
    <h:commandButton value="Añadir Fila" immediate="true" action="#{tablaController.addRowAction}" />
    <h:dataTable value="#{tablaController.lista}" var="fila" cellpadding="0" cellspacing="0" border="1">
        <f:facet name="header">TABLA</f:facet>
        <h:column>
             <f:facet name="header"><h:outputLabel value="NOMBRE" /></f:facet>
             <h:inputText id="nom" value="#{fila.nombre}" />
             <h:message for="nom" class="msjError" />
        </h:column>
        <h:column>
            <f:facet name="header"></f:facet>
            <h:commandButton value="Quitar Fila" immediate="true" action="#{tablaController.removeRowAction(fila)}" />
        </h:column>
    </h:dataTable>
</h:form>
Run Code Online (Sandbox Code Playgroud)

我的支持豆:

@ManagedBean(name="tablaController")
@ViewScoped
public class TablaController {

private List<Fila> lista;
...
public TablaController() { }
...
@PostConstruct
public void init() {
    this.lista = new ArrayList<Fila>();
    for (int i=0; i<5; i++) {
        Fila …
Run Code Online (Sandbox Code Playgroud)

datatable jsf add immediate-attribute

5
推荐指数
1
解决办法
6705
查看次数

为什么将"立即"属性添加到EditableValueHolders?

最初immediateflag仅用于ActionSource接口.但后来它也被添加到EditableValueHolder界面中.设计决策的原因是什么?

jsf design-decisions immediate-attribute

5
推荐指数
1
解决办法
3911
查看次数