- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
<h:form>
<p:inputText required="true">
<p:ajax event="click" immediate="true" process="@this" update="@this" />
</p:inputText>
</h:form>
即使 ajax 是立即执行的,单击也会导致验证。为什么?
<小时/>我
做不到
终于解决了这个问题:
<h:form>
<p:dataGrid var="elem" value="#{immediateTestBean.elements}" columns="3">
<f:facet name="footer">
<p:commandButton action="#{immediateTestBean.newElement}" immediate="true"
process="@namingcontainer" update="@namingcontainer" value="#{bundle.add}" />
</f:facet>
<h:panelGrid columns="3">
<p:selectOneMenu value="#{elem.type}">
<p:ajax immediate="true" process="@form" update="@form" />
<f:selectItem itemValue="text" itemLabel="#{bundle.text}" />
<f:selectItem itemValue="date" itemLabel="#{bundle.date}" />
</p:selectOneMenu>
<h:panelGroup id="detail">
<p:inputText value="#{elem.text}" required="true" rendered="#{elem.type == 'text'}"
validator="#{immediateTestBean.testValidate}" label="#{bundle.text}">
<f:validateLength minimum="4" />
</p:inputText>
<p:calendar value="#{elem.date}" required="true" rendered="#{elem.type == 'date'}"
pattern="dd/MM/yyyy" readonlyInput="true" showOn="button"
validator="#{immediateTestBean.testValidate}" label="#{bundle.date}" />
</h:panelGroup>
<p:commandButton action="#{immediateTestBean.removeElement(elem)}" immediate="true"
process="@namingcontainer" update="@namingcontainer" value="#{bundle.remove}" />
</h:panelGrid>
</p:dataGrid>
<p:spacer height="10" style="display: block" />
<p:commandButton process="@form" update="@form" value="#{bundle.submit}" />
</h:form>
一切正常,除了 <p:ajax immediate="true" process="@form" update="@form" />
它的行为与 UICommand
不同s do:验证发生(但在 APPLY_REQUEST_VALUES
阶段)。
我尝试深入研究 JSF 源代码并注意到 UICommand
调用facesContext.renderResponse()
默认ActionListenerImpl.processAction()
,所以我尝试了:
<p:ajax listener="#{facesContext.renderResponse}" immediate="true" process="@form" update="@form" />
现在,当我选择“日期”时,验证将被跳过,但 <h:panelGroup id="detail">
没有更新。
然后,我认为跳过验证也会导致跳过更新模型,所以我调用:
<p:ajax listener="#{immediateTestBean.skip}" immediate="true" process="@form" update="@form" />
终于成功了。
但是出现了两个问题:
但是,这是 bean 的代码:
@ManagedBean
@ViewScoped
public class ImmediateTestBean implements Serializable
{
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(ImmediateTestBean.class);
public class Element
{
private String type = "text";
private String text;
private Date date;
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
public String getText()
{
return text;
}
public void setText(String text)
{
this.text = text;
}
public Date getDate()
{
return date;
}
public void setDate(Date date)
{
this.date = date;
}
}
private final List<Element> elements = new ArrayList<>();
public void testValidate(FacesContext context, UIComponent component, Object value)
{
logger.debug("phase: {}", context.getCurrentPhaseId());
}
public void skip()
{
logger.debug("Faces.getCurrentPhaseId(): {}", Faces.getCurrentPhaseId());
UIInput component = (UIInput) Components.getCurrentComponent();
logger.debug("component: {}", component);
FacesContext context = Faces.getContext();
component.validate(context);
if(component.isValid())
{
component.updateModel(context);
}
Faces.renderResponse();
}
public void newElement()
{
elements.add(new Element());
}
public void removeElement(Element elem)
{
elements.remove(elem);
}
public List<Element> getElements()
{
return elements;
}
}
最佳答案
根据 PrimeFaces 文档:“此功能简单但功能强大,足以进行组验证,避免验证不需要的组件”。
您可以在 PrimeFaces 文档的4.2 部分处理章节中找到部分处理的示例
尝试使用<p:ajax immediate="true" process="@this, #{p:component('detail')}" update="#{p:component('detail')}" />
immediate="true"
将跳过流程验证、更新模型值和调用应用程序 JSF 生命周期阶段,但 process="@this, #{p:component('detail')}"
将仅为组件执行“应用请求值”、“处理验证”、“更新模型值”和“调用应用程序 JSF 生命周期阶段”<h:panelGroup id="detail"
和<p:selectOneMenu value="#{elem.type}">...
关于ajax - p :ajax immediate ="true" on UIInput does not skip validation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28031472/
我正在尝试模拟 javax.faces.component.UIInput 类。 我的类(class)如下 public class MyBean{ private UIInput someI
这是问题所在,JSF 验证不断将字段翻转回最后一个已知值。 我们正在编辑一个支持 bean 已经有值的页面。 (频率=“每周”) 并且我们需要显示“请选择..”的默认值,即使该值不会通过验证(是的,我
在处理 JSF 自定义组件时遇到了一些困难。如果有人能让我先行一步,那就太好了。 这个想法是有一个组件可以让我翻阅 LocalDate 。考虑一个更简单的日期选择器。呈现的 HTML 有两个按钮,一个
在处理 JSF 自定义组件时遇到了一些困难。如果有人能让我先行一步,那就太好了。 这个想法是有一个组件可以让我翻阅 LocalDate 。考虑一个更简单的日期选择器。呈现的 HTML 有两个按钮,一个
我有一个可以操作合约的 Xpages 应用程序。一个过程使用“conService”字段中的契约(Contract)类型值来确定接下来必须发生的情况。下面的代码不会产生任何错误,但第三行似乎没有处理任
我正在尝试自定义 SystemEventListener为所有类型的实例注册 UIInput并对他们的 postValidate 使用react- 事件。根据我在网上找到的一个例子,我设法让一个运行
例如,在我使用带有参数的方法来获取我的 JSF 页面上组件的值之前 但是现在我需要相同的原则,但是在 inputText 元素的值属性上使用它,所以它或多或少像这样: 问题是当从 f:ajax 元
我想对getValue()之间的区别做一个说明性的解释。和 getLocalValue() UIInput components 的方法在执行多字段验证方面:jsf validate two fiel
我想在验证失败后将 JSF 输入重置为其原始托管 Bean 值。 我在同一页面中有两个表单 - 第一个表单有 commandLink初始化第二个表单。第二种表单呈现为一个对话框,其可见性通过 jQue
我正在使用 NGUI 的 UIInput 类来接受用户的文本输入。当我开始在移动设备中的文本框中输入内容时。出现一个键盘,它内部有另一个文本框,带有“确定”/“完成”按钮(就像键盘配件 View ,如
验证器类: @FacesValidator("br.gov.valec.sicpd.util.CpfValidator") public class CpfValidator implements V
TL;DR 即使 ajax 是立即执行的,单击也会导致验证。为什么? 我做不到终于解决了这个问题:
我正在尝试验证 ui:repeat 中的多个组件。 如何从 SiteBean 中的 ui:repeat 获取 UIInput? JSF 代码是:
更新:现在再次更新。我认为我之前的分析是错误的,因为我现在已经能够为此创建一个示例。它似乎与复合组件和 insertChildren 标签有关。 这是我的小脸:
我正在尝试编写一个渲染器来处理 placeholder 上的属性零件。阅读完JSF 2.0 strips out needed HTML5 attributes后,我走上了这条路这似乎是正确的。这是
jsf-api.jar 包含各种本地化的 Messages.properties 文件,这些文件一方面包含 javax.faces.component.UIInput.CONVERSION 键,另一方
我是一名优秀的程序员,十分优秀!