Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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 为什么在具有ViewScope的RichFaces 4.3组件中多次调用PostConstruct方法?_Ajax_Jsf 2_Richfaces_View Scope_Postconstruct - Fatal编程技术网

Ajax 为什么在具有ViewScope的RichFaces 4.3组件中多次调用PostConstruct方法?

Ajax 为什么在具有ViewScope的RichFaces 4.3组件中多次调用PostConstruct方法?,ajax,jsf-2,richfaces,view-scope,postconstruct,Ajax,Jsf 2,Richfaces,View Scope,Postconstruct,我在Tomcat7上遇到了JSF2.2和RichFaces4.3.2的问题。 “我的页面”被标注为“查看范围”。 我显示第一个表单。当我更改值并选择一个特定值时,我通过ajax在a4j:outputPanel中显示rich:panel元素。 在这个a4j:outputPanel和rich:panel组件中,我有一个执行表单的h:commandButton。 例如,如果字段为空(或其他内容),我想检索表单的错误消息 但当我单击h:commandButton时,视图被重新实例化,并且@postcon

我在Tomcat7上遇到了JSF2.2和RichFaces4.3.2的问题。 “我的页面”被标注为“查看范围”。 我显示第一个表单。当我更改值并选择一个特定值时,我通过ajax在
a4j:outputPanel
中显示
rich:panel
元素。 在这个
a4j:outputPanel
rich:panel
组件中,我有一个执行表单的
h:commandButton
。 例如,如果字段为空(或其他内容),我想检索表单的错误消息

但当我单击
h:commandButton
时,视图被重新实例化,并且
@postcontract
方法被重新执行。它应该只在视图范围内执行一次,我错了吗

我不希望视图被反应化,我希望在单击内部的
h:commandButton
时保持
ajaxoutputPanel
的显示。(我希望看到我的表单字段旁边的
h:messages
…不太要求:-)

我读到一些。。。例如,有没有一种方法可以在不传递给SessionScoped的情况下更改此行为

谢谢,伙计们

    <fieldset>

    <h:form>

        <h:panelGrid columns="3">

            <h:outputText value ="Nom de l'étude : "></h:outputText> 
            <h:inputText id="study_name" value="#{analyse.study_name}"   size="20" required="true"  label="Nom de l'étude" />
            <h:message for="study_name" style="color:red" />

            <h:outputText value ="Analyse : "> </h:outputText> 
            <h:selectOneMenu  id = "analyse" value="#{analyse.analyse_type}">
            <f:selectItems value="#{analyse.analyse_type2Value}" />
                  <f:ajax execute="analyse" render=":ajaxOutputPanelAnalyse"  /> 
            </h:selectOneMenu>

         </h:panelGrid>

    </h:form>

</fieldset>

    <a4j:outputPanel id="ajaxOutputPanelAnalyse" layout="block" ajaxRendered="true"  >

    <rich:panel  id="richPanelAnalyse"  rendered="#{analyse.analyse_type == 'NGS' and request.isUserInRole('ROLE_ADMIN_PROFILER_NGS')}" >

        <h:form id ="NGS_form" >

            <h:panelGrid columns="4">

                <h:outputText value ="Run # :"> </h:outputText> 
                <h:inputText id="run_number" value="# {analyse.run_number}" size="20" required="true" label="Run" />
                <h:message for="run_number" style="color:red" />
                <h:outputText></h:outputText>


            </h:panelGrid>



                 <h:commandButton value="Submit" action="#{analyse.addAnalyse}"/>


            </h:form>

    </rich:panel>




  </a4j:outputPanel>

感谢BalusC的这篇文章(一如既往)

编辑:但当您尝试添加一个rich:fileupload时,它不再工作,也不使用h:inputFile。。。当你点击按钮时,它会在一个新的文本区域显示奇怪的html代码…这很奇怪

           <rich:fileUpload  id="upload" fileUploadListener="#{analyse.test}"  acceptedTypes="bam,pdf,png" ontyperejected="alert('Seulement les fichiers avec l'extension bam et pdf sont acceptés.');" maxFilesQuantity="3">
                  <a4j:ajax event="uploadcomplete" execute="@none" render="upload" />        
            </rich:fileUpload>

                          

因此,您的提交按钮位于任何表单之外,这是不正确的。你还可以展示bean定义和按钮的动作方法吗?拍得不错,但我只是在复制代码时犯了一个错误。提交实际上是在表单中。(我编辑)。例如,button的action方法是空的,它只是打印一些东西……我会发布bean,但我认为问题不在于bean。这是一个非常常见的bean注释managedBean(ViewScoped),带有xhtml中属性的getter和setter…我的postconstruct方法只是从bean属性中的faces上下文设置flash参数。您的操作方法会返回什么?我返回pretty:home…我使用prettyFaces样式进行导航,然后转到我的主页。注意如果删除第一个表单中的rich:panel、f:ajax调用和a4j:outputPanel,postconstruct方法调用一次……bean初始化一次,每个表单字段的错误消息都会很好地显示出来。我认为问题是由于ajax的东西。。。
           <rich:fileUpload  id="upload" fileUploadListener="#{analyse.test}"  acceptedTypes="bam,pdf,png" ontyperejected="alert('Seulement les fichiers avec l'extension bam et pdf sont acceptés.');" maxFilesQuantity="3">
                  <a4j:ajax event="uploadcomplete" execute="@none" render="upload" />        
            </rich:fileUpload>