Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 将f:viewParam与必需的属性和命令一起使用_Ajax_Jsf_Jsf 2_Primefaces_Validationerror - Fatal编程技术网

Ajax 将f:viewParam与必需的属性和命令一起使用

Ajax 将f:viewParam与必需的属性和命令一起使用,ajax,jsf,jsf-2,primefaces,validationerror,Ajax,Jsf,Jsf 2,Primefaces,Validationerror,我想分享我使用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.

我想分享我使用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>
首先,请记住,如果没有p:messages,您将无法看到此消息,您必须挖掘primefaces在ajax调用中发送的XML。其次,经过4个小时的调试后,我尝试更改f:viewParam,如下所示:

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

不需要“required”:神奇地一切开始工作,我可以单击1、2、3等,每次都会调用myMethod。所以,问题是ajax提交验证了用f:viewParam指定的参数,这听起来很傻,但好吧,我可以接受它

我的问题是:

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

  • 在部分ajax调用中验证视图参数(在我看来,它属于视图)应该没问题吧

  • 有没有办法告诉primefaces不要对特定ajax请求进行验证(process=“@this”无法解析)

谢谢你,我希望我的经验能让你避免花几个小时做调试

  • viewParam
    是一个
    UIComponent
    。这意味着它在语义上与
    没有区别,并且它可能会经历每个规定的JSF请求处理生命周期阶段,直到并包括验证和转换。事实上,标签本身会导致任何给定视图进入任何给定页面的完整处理过程,只要在那里就可以了

  • 将进行回发,这意味着它将使用POST重新请求相同的视图。因此,要解决您当前的问题,您需要将所需条件建立在以下事实的基础上:

    <f:viewParam  required="#{!facesContext.postback}" name="id_file" value="{bean.idFile}"/>
    
    
    
    从新条件中得到的是,只有在第一次请求时才需要该参数。后续回发不会触发该条件。只需确保您没有任何围绕该期望构建的逻辑(可能在
    @PostConstruct
    中)


  • 谢谢你,kolossus,它现在正如我所期望的那样工作。但是我仍然想知道为什么第一次点击按钮没有产生任何验证错误,我的意思是,在第一次ajax调用中,我没有“id_文件”,还是不?@moretti.fabio-不完全确定,对我来说似乎很奇怪。你是从另一个页面导航到该页面?还是重新加载该页面?我尝试过从零加载该页面,从另一个页面加载该页面,并使用ctrl+f5刷新该页面,结果总是一样的:第一次单击有效,后续单击无效。
    <f:viewParam  required="#{!facesContext.postback}" name="id_file" value="{bean.idFile}"/>