gpt4 book ai didi

ajax - 使用 f :viewParam with required attribute and commands

转载 作者:行者123 更新时间:2023-12-02 18:18:38 26 4
gpt4 key购买 nike

我想分享我使用 primefaces、f:viewParam 和 p:commandButton 的经验,并提出几个问题。请看一下此页面:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<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:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui">
<h:head></h:head>
<h:body>
<f:metadata>
<f:viewParam required="true" name="id_file" value="#{bean.idFile}" />
</f:metadata>
<h:form id="tableform" prependId="false">
<p:commandButton actionListener="#{bean.myMethod())}" icon="ui-icon-search" title="View" />
</h:form>
<p:messages id="messages" showDetail="true" autoUpdate="true" closable="true" />
</h:body>
</html>

支持 bean 有一个不执行任何操作的“myMethod()”方法。当您进入页面时,它需要“id_file”参数并将其放入支持 bean 的 idFile 属性中。然后单击按钮并调用 myMethod。然后您再次单击,您会收到一个模糊的验证错误,并且 myMethod 永远不会被调用:

j_idt1: Validation Error: Value is required.j_idt1: Validation Error: Value is required.

首先,请记住,如果没有 p:messages,您将看不到此消息,您必须挖掘 primefaces 在 ajax 调用上发送的 XML。其次,经过 4 个小时的调试,我尝试像这样更改 f:viewParam:

<f:viewParam name="id_file" value="#{bean.idFile}" />

没有“必需”:神奇的是,一切都开始工作,我可以单击 1、2、3 等,每次都会调用 myMethod。所以,问题是 ajax 提交验证 f:viewParam 指定的参数,这对我来说听起来很愚蠢,但是好吧,我可以忍受它。

我的问题是:

  • 为什么第一次单击按钮时不会出现此验证错误?如果您查看 ajax POST,它们是相同的

  • 在部分ajax调用上验证 View 参数(在我看来,属于 View )应该可以吗?

  • 有没有办法告诉 primefaces 不要验证特定的 ajax 请求(process="@this"无法解析)?

谢谢,我希望我的经验能让您避免花费大量时间进行调试!

最佳答案

  1. viewParamUIComponent 。这意味着它在语义上与 <h:commandButton/> 没有什么不同。或<h:inputText/>它能够经历每个规定的 JSF 请求处理生命周期阶段,直到并包括验证和转换。事实上,标签本身会导致任何给定 View 进入任何给定页面的完整处理,只需在那里

  2. <p:commandButton/>将执行回发,这意味着它将使用 POST 重新请求相同的 View 。因此,要解决您当前的问题,您需要根据以下事实确定所需的条件:

    <f:viewParam  required="#{!facesContext.postback}" name="id_file" value="{bean.idFile}"/>

    从新条件中得到的结果是,仅在第一次请求时才需要该参数。后续回发不会触发该条件。只要确保您没有任何逻辑(也许在围绕该期望构建的 @PostConstruct

关于ajax - 使用 f :viewParam with required attribute and commands,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21222348/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com