Jsf 为什么p:panelGrid';SP:row';当ui:包含时,在相同的p:对话框中忽略和不忽略s呈现属性?

Jsf 为什么p:panelGrid';SP:row';当ui:包含时,在相同的p:对话框中忽略和不忽略s呈现属性?,jsf,primefaces,jsf-2,Jsf,Primefaces,Jsf 2,我有一个索引.xhtml <?xml version='1.0' encoding='UTF-8' ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="ht

我有一个
索引.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Project1</title>
        <script name="jquery/jquery.js" library="primefaces"></script>
    </h:head>
    <h:body>
        <ui:composition template="template.xhtml">
            <ui:define name="content">
                <h:form id="mainForm">
                    <ui:include src="/WEB-INF/includes/offer.xhtml">
                    </ui:include>
                    <p:messages/>
                </h:form>
            </ui:define>
        </ui:composition>
    </h:body>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ui:insert name="content"/>
    </h:body>
</html>
<ui:composition>
    <ui:include src="/WEB-INF/dialogs/offerdialog.xhtml">
    </ui:include>
    <p:commandButton value="Dialog 1 (doesn't repond to mode change)"
            onsuccess="PF('myDialogVar1').show();">
    </p:commandButton>
    <p:commandButton value="Dialog 2 (does respond to mode change)"
            onsuccess="PF('myDialogVar').show();">
    </p:commandButton>
</ui:composition>
<ui:composition>
    <p:dialog id="myDialog1" widgetVar="myDialogVar1" modal="true">
        <h:form>
            <h:panelGroup>
                <p:outputLabel value="Edit mode:"/>
                <p:selectOneButton value="#{offers.creationMode}">
                    <f:selectItems value="#{offers.creationModes}"/>
                    <p:ajax update="@form"/>
                </p:selectOneButton>
            </h:panelGroup>
            <p:panelGrid>
                <p:row>
                    <p:column>
                        <p:outputLabel value="Row 1:"/>
                    </p:column>
                    <p:column>
                        <p:inputText>
                            <p:ajax/>
                        </p:inputText>
                    </p:column>
                </p:row>
                <p:row rendered="#{offers.displayAdvancedModeComponents()}">
                    <p:column>
                        <p:outputLabel value="Row 2:"/>
                    </p:column>
                    <p:column>
                        <p:inputText>
                            <p:ajax/>
                        </p:inputText>
                    </p:column>
                </p:row>
            </p:panelGrid>
        </h:form>
    </p:dialog>
    <p:dialog id="myDialog" widgetVar="myDialogVar" modal="true">
        <h:form>
            <h:panelGroup>
                <p:outputLabel value="Edit mode:"/>
                <p:selectOneButton value="#{offers.creationMode}">
                    <f:selectItems value="#{offers.creationModes}"/>
                    <p:ajax update="@form"/>
                </p:selectOneButton>
            </h:panelGroup>
            <p:panelGrid>
                <p:row>
                    <p:column>
                        <p:outputLabel value="Row 1:"/>
                    </p:column>
                    <p:column>
                        <p:inputText>
                            <p:ajax/>
                        </p:inputText>
                    </p:column>
                </p:row>
                <p:row rendered="#{offers.displayAdvancedModeComponents()}">
                    <p:column>
                        <p:outputLabel value="Row 2:"/>
                    </p:column>
                    <p:column>
                        <p:inputText>
                            <p:ajax/>
                        </p:inputText>
                    </p:column>
                </p:row>
            </p:panelGrid>
        </h:form>
    </p:dialog>
</ui:composition>
包括
/WEB-INF/includes/offer.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
      xmlns:p="http://primefaces.org/ui">
    <h:head>
        <title>Project1</title>
        <script name="jquery/jquery.js" library="primefaces"></script>
    </h:head>
    <h:body>
        <ui:composition template="template.xhtml">
            <ui:define name="content">
                <h:form id="mainForm">
                    <ui:include src="/WEB-INF/includes/offer.xhtml">
                    </ui:include>
                    <p:messages/>
                </h:form>
            </ui:define>
        </ui:composition>
    </h:body>
</html>
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://xmlns.jcp.org/jsf/html"
      xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
    <h:head>
        <title>Facelet Title</title>
    </h:head>
    <h:body>
        <ui:insert name="content"/>
    </h:body>
</html>
<ui:composition>
    <ui:include src="/WEB-INF/dialogs/offerdialog.xhtml">
    </ui:include>
    <p:commandButton value="Dialog 1 (doesn't repond to mode change)"
            onsuccess="PF('myDialogVar1').show();">
    </p:commandButton>
    <p:commandButton value="Dialog 2 (does respond to mode change)"
            onsuccess="PF('myDialogVar').show();">
    </p:commandButton>
</ui:composition>
<ui:composition>
    <p:dialog id="myDialog1" widgetVar="myDialogVar1" modal="true">
        <h:form>
            <h:panelGroup>
                <p:outputLabel value="Edit mode:"/>
                <p:selectOneButton value="#{offers.creationMode}">
                    <f:selectItems value="#{offers.creationModes}"/>
                    <p:ajax update="@form"/>
                </p:selectOneButton>
            </h:panelGroup>
            <p:panelGrid>
                <p:row>
                    <p:column>
                        <p:outputLabel value="Row 1:"/>
                    </p:column>
                    <p:column>
                        <p:inputText>
                            <p:ajax/>
                        </p:inputText>
                    </p:column>
                </p:row>
                <p:row rendered="#{offers.displayAdvancedModeComponents()}">
                    <p:column>
                        <p:outputLabel value="Row 2:"/>
                    </p:column>
                    <p:column>
                        <p:inputText>
                            <p:ajax/>
                        </p:inputText>
                    </p:column>
                </p:row>
            </p:panelGrid>
        </h:form>
    </p:dialog>
    <p:dialog id="myDialog" widgetVar="myDialogVar" modal="true">
        <h:form>
            <h:panelGroup>
                <p:outputLabel value="Edit mode:"/>
                <p:selectOneButton value="#{offers.creationMode}">
                    <f:selectItems value="#{offers.creationModes}"/>
                    <p:ajax update="@form"/>
                </p:selectOneButton>
            </h:panelGroup>
            <p:panelGrid>
                <p:row>
                    <p:column>
                        <p:outputLabel value="Row 1:"/>
                    </p:column>
                    <p:column>
                        <p:inputText>
                            <p:ajax/>
                        </p:inputText>
                    </p:column>
                </p:row>
                <p:row rendered="#{offers.displayAdvancedModeComponents()}">
                    <p:column>
                        <p:outputLabel value="Row 2:"/>
                    </p:column>
                    <p:column>
                        <p:inputText>
                            <p:ajax/>
                        </p:inputText>
                    </p:column>
                </p:row>
            </p:panelGrid>
        </h:form>
    </p:dialog>
</ui:composition>
第一个对话框
myDialog
不响应创建模式的更改(
BASIC
ADVANCED
),而第二个相同的
myDialog
响应。第一个应该像在
index.xhtml
中声明所有内容而不使用模板一样响应

对话框是相同的,以表明第一个对话框而不是第二个对话框出现的问题与对话框的结构无关。该示例除了说明意外行为之外没有任何函数(
p:inputText
不绑定到支持bean值,等等)

麦克维在


我正在使用Primefaces 6.1。

我现在无法测试它,但我相信这是使用对话框时的“奇怪事情”之一。尝试使用
appendTo=“@(body)”
确保两个对话框都附加到html正文,而不是“原地”。如果这有帮助,请尝试将对话框实现“移近”主体,以避免
appendTo
-属性存在一些缺点。@dognose将
appendTo=“@(主体)”
添加到非工作对话框中没有帮助。我非常感谢您在这方面的帮助,因为您似乎已经有了想法。然后尝试在对话框中使用
dynamic=true
。如果内容相同,为什么要使用两个对话框?另一件要尝试的事情是:现在有两个表单使用相同的属性
creationMode
-取决于primefaces如何设计
changeEventListener
-订阅,第二个表单可能会覆盖第一个处理程序注册,因此第二个(dom)创建的对话框工作,第一个不工作。(请尝试使用
offer.creationMode1
offer.creationMode2
)我还记得,primefaces中存在一个问题,如果一个id(或小部件变量,不能准确地组成)是另一个id的子字符串(
MyDialogVar
MyDialogVar1
),请尝试两个不同的名称(
MyDialogVar1
MyDialogVar2
)。IIRC在某一点上primefaces使用类似于
StartWith()
的方法来查找组件,这很模糊,总是导致变量名“更长”。您是否尝试了@dognose建议的解决方法?我现在无法测试它,但我相信这是“奇怪的事情”之一使用对话框时,请尝试使用
appendTo=“@(body)”
以确保两个对话框都连接到html正文,而不是“原地”。如果这有帮助,请尝试将对话框实现“更靠近”正文,以避免出现
appendTo
-属性,该属性有几个缺点。@dognose添加
appendTo=”@(正文)
对于非工作对话框没有帮助。我非常感谢您在这方面的帮助,因为您似乎已经有了一个想法。然后尝试在对话框上使用
dynamic=true
。如果内容相等,为什么要使用两个对话框?另一件要尝试的事情是:您现在有两个表单使用相同的属性
creationMode
-d根据primefaces如何设计
changeEventListener
-Subscription,第二个表单可能会覆盖第一个处理程序注册,因此第二个(dom)创建的对话框可以工作,而第一个不能。(使用
offer.creationMode1
offer.creationMode2
进行尝试)我还记得,primefaces中存在一个问题,如果一个id(或小部件变量,不能准确地表示成员)是另一个id的子字符串(
MyDialogVar
MyDialogVar1
)-请尝试两个不同的名称(
MyDialogVar1
MyDialogVar2
).IIRC在某一点上primefaces使用类似于
startsWith()
的方法来查找组件,这是含糊不清的,总是导致变量名“更长”。您是否尝试了@dognose建议的解决方法?