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
Jsf 2 actionListener未在内部调用<;c:如果>;_Jsf 2_Primefaces_Jstl_Actionlistener_Facescontext - Fatal编程技术网

Jsf 2 actionListener未在内部调用<;c:如果>;

Jsf 2 actionListener未在内部调用<;c:如果>;,jsf-2,primefaces,jstl,actionlistener,facescontext,Jsf 2,Primefaces,Jstl,Actionlistener,Facescontext,我有以下代码,使用jsf2.2和primefaces 3.2。 我的要求是根据updateFlag更新项目。 当我使用c:if(xmlns:c=”时http://java.sun.com/jsp/jstl/core)与以下代码类似,不调用Update commandButton的操作侦听器。但是如果我使用而不是,它就会工作。请帮我弄清楚,我想我应该用c:如果它不起作用 <p:dialog widgetVar="projectUpdate" id="projectUpdatePanel" m

我有以下代码,使用jsf2.2和primefaces 3.2。 我的要求是根据updateFlag更新项目。 当我使用c:if(xmlns:c=”时http://java.sun.com/jsp/jstl/core)与以下代码类似,不调用Update commandButton的操作侦听器。但是如果我使用而不是,它就会工作。请帮我弄清楚,我想我应该用c:如果它不起作用

<p:dialog widgetVar="projectUpdate" id="projectUpdatePanel" modal="false" >

                <p:panel>
                    <c:if test="#{projectBean.updateFlag == false}">
                            <h:outputText value="Project Title" />
                            <p:inputText disabled="true" value="#{projectBean.selectedProjectDo.projectTitle}" />
                            <p:commandButton value="Update" disabled="true" />
                            <p:commandButton value="Cancel" actionListener="#{projectBean.cancelUpdate}" />
                    </c:if>
                    <c:if test="#{projectBean.updateFlag == true}">                           
                            <h:outputText value="Project Title"/>
                            <p:inputText value="#{projectBean.selectedProjectDo.projectTitle}" />
                            <p:commandButton value="Update" actionListener="#{projectBean.updateProject}" />
                            <p:commandButton value="Cancel" actionListener="#{projectBean.cancelUpdate}" />
                    </c:if>
                </p:panel>

            </p:dialog>

您最好按以下方式使用它(在禁用属性上设置一个条件)



一般来说:除非您真的需要,否则不要使用JSTL标记…

您最好按照以下方式使用它(在禁用的属性上设置一个条件)



一般来说:不要使用JSTL标记,除非你真的需要它们…

这是一个典型的非代码示例,这是不好的。丹尼尔完美地展示了如何使它干燥,但他没有解释问题的原因

根据问题症状,当
{projectBean}
是视图范围的bean时,就会发生这种情况。视图范围的bean存储在JSF视图状态中。因此,视图范围的bean只有在恢复视图阶段之后才可用。但是,JSTL标记在恢复视图阶段运行,而视图范围的bean还不可用。这导致创建一个全新的视图范围bean实例,该实例随后被存储在恢复的JSF视图状态中的真实视图范围bean所取代。JSTL使用的全新且独立的视图范围bean将其所有属性设置为默认值,因此将始终调用具有
updateFlag=false
的块

另见:

    • 这是一个典型的非代码示例,这是不好的。丹尼尔完美地展示了如何使它干燥,但他没有解释问题的原因

      根据问题症状,当
      {projectBean}
      是视图范围的bean时,就会发生这种情况。视图范围的bean存储在JSF视图状态中。因此,视图范围的bean只有在恢复视图阶段之后才可用。但是,JSTL标记在恢复视图阶段运行,而视图范围的bean还不可用。这导致创建一个全新的视图范围bean实例,该实例随后被存储在恢复的JSF视图状态中的真实视图范围bean所取代。JSTL使用的全新且独立的视图范围bean将其所有属性设置为默认值,因此将始终调用具有
      updateFlag=false
      的块

      另见:

      感谢巴卢斯克的精彩解释。非常有帮助。谢谢巴卢斯克,你的解释。这很有帮助。
      <p:panel>                     
          <h:outputText value="Project Title"/>
          <p:inputText disabled="#{not projectBean.updateFlag}" 
              value="#{projectBean.selectedProjectDo.projectTitle}" />
          <p:commandButton disabled="#{not projectBean.updateFlag}" value="Update" 
              actionListener="#{projectBean.updateProject}" />
          <p:commandButton value="Cancel" actionListener="#{projectBean.cancelUpdate}" />
      </p:panel>