Я использую Primefaces 3.4.2 с JSF2.1. Я создал страницу, разделенную на несколько единиц макета. В правом блоке макета у меня есть аккордеонная панель и создано динамическое меню, а средний центральный макет состоит из ui: include, и страница загружается в слой. Когда я нажимаю на ссылку, открывается диалоговое окно, которое включает динамическую страницу. После открытия и закрытия диалогового окна без выполнения каких-либо действий в правом макете средний центральный макет больше не работает. Я вижу это, но нажимаю на вводимый текст Я не могу ничего ввести в него, также нажимаю другие компоненты, ничего не происходит !!! в чем проблема? Есть ли решение?

При нажатии элементов меню открывается диалоговое окно, включающее другую страницу, и при изменении макета центра узла дерева, открываемая в диалоговом окне страница работает хорошо, но при закрытии диалогового окна центральные кнопки макета и входы не работают, другие компоненты макета работают хорошо!

Мой новый код:

     <p:layoutUnit id="right" position="east" size="145"  style="text-align:center;direction: ltr!important;padding: 0px!important;">
                    <h:form prependId="false">
                         <script type="text/javascript">
                            function test(id,url,title){
                                document.getElementById('h1').value=id;
                                document.getElementById('h2').value=url;
                                document.getElementById('h3').value=title;
                                salamm.jq.click();
                            } 
                        </script>
                        <h:inputHidden id="h1" value="#{adminC.nclose}" />
                        <h:inputHidden id="h2" value="#{adminC.nurl}"/>
                        <h:inputHidden id="h3" value="#{adminC.ntitle}"/>
                        <p:commandButton actionListener="#{adminC.addTab()}" id="salam" widgetVar="salamm" update=":dlgpanel" onstart="waitDialogmain.show()" style="display: none" oncomplete="waitDialogmain.hide();dlg1.show()"/>  
                        <p:accordionPanel style="text-align: center;font-family: tahoma!important" activeIndex="#{menuGen.activeIndex}">
                             <p:tab title="connections"  id="t0" rendered="#{menuGen.menuList1.length()>0}"  >

                                 <center>

                                                <h:outputText escape="false" value="#{menuGen.menuList1}"/>
                                            </center>
                                            <br/>
                                        </p:tab>
                                        <p:tab title="manage" id="t1" rendered="#{menuGen.menuList2.length()>0}" >
                                            <center>
                                                <h:outputText value="#{menuGen.menuList2}" escape="false"/>
                                            </center>
                                            <br/>
                                        </p:tab>

                            </p:accordionPanel>
                     </h:form>
                                 </p:layoutUnit>
                <p:layoutUnit id="center" style="padding: 0px!important;" position="center">
                    <p:layout widgetVar="mkh">
                        <p:layoutUnit id="middleright" position="east" size="170"  collapsible="true" style="padding: 0px;direction: ltr" >
                            <h:form prependId="false">
                             <p:tree value="#{treeC.root}"  var="node" dynamic="true" style="width: 165px;border: none;direction: rtl!important;text-align: right;font-family: tahoma;font-weight: bold" selectionMode="single" selection="#{treeC.selectedNode}">
                                 <p:ajax event="select" listener="#{treeC.onNodeSelect}" onstart="waitDialogmain.show()" oncomplete="waitDialogmain.hide()" />       
                                 <p:treeNode  >
                                     <h:outputText value="#{node}"/>
                                 </p:treeNode>

                             </p:tree>
                             <p:commandButton onclick="mkh.toggle('east')" icon="ui-icon-triangle-1-e" title="ctr+shift+right arrow" style="width: 6px;height: 80px;position: absolute;top: 50%;" type="button"/> 
                      </h:form>
                        </p:layoutUnit>
                        <p:layoutUnit id="middlecenter" style="padding: 0px!important;" position="center">
                            <p:layout style="text-align: center">
                                <p:layoutUnit id="middlecenter1" style="padding: 0px!important;" position="center" resizable="true" >

                                        <p:outputPanel autoUpdate="true" id="dlgpanelcenter">                 
                                        <center>
                                            <ui:include src="./../users/networkReport.xhtml" />
                                        </center>
                                    </p:outputPanel>

                                </p:layoutUnit>                                
                                <p:layoutUnit id="middleBottom" size="100"  style=" padding: 0px!important" position="south" resizable="true" >



                                </p:layoutUnit>
                            </p:layout>
                        </p:layoutUnit>
                    </p:layout>
                </p:layoutUnit>
            </p:layout>
            <p:dialog id="dlg" resizable="false" maximizable="true" modal="true"  draggable="true" height="400"  widgetVar="dlg1" style="background-color: white!important;text-align: center!important;direction: ltr">

                <p:outputPanel style="direction: rtl" id="dlgpanel" >                   
                    <center>
                        <ui:include  src="#{adminC.url}" />
                    </center>
                   </p:outputPanel>

            </p:dialog>

        </h:body>
    </f:view>
</html>

И это одна страница, которая открывается внутри диалога:

 <ui:composition xmlns:ui="http://java.sun.com/jsf/facelets"
            template="./../template/masterTemplate.xhtml"
            xmlns:p="http://primefaces.org/ui"
            xmlns:h="http://java.sun.com/jsf/html"
            xmlns:f="http://java.sun.com/jsf/core"
            xmlns="http://www.w3.org/1999/xhtml"
            xmlns:sec="http://www.springframework.org/security/tags">

<ui:define name="top">

</ui:define>
<ui:define name="content">
    <h:form id="regChannel" prependId="false" style="text-align: right;float: none!important">
      ........

   </h:form>        
</ui:define>
<ui:define name="bottom">

</ui:define>
0
faranak 14 Янв 2013 в 11:12
Возможно, вы столкнулись с ошибкой javascript. Откройте инструмент разработчика браузера, например firebug, и посмотрите, есть ли проблема.
 – 
Aritz
14 Янв 2013 в 11:25
Я проверил с помощью хромового отладчика, но не проблема!
 – 
faranak
14 Янв 2013 в 12:23
 – 
BalusC
14 Янв 2013 в 16:11
@faranak, вы уверены, что вам нужны все эти <ui:define в диалоге? попробуйте удалить все <ui:define + template="./../template/masterTemplate.xhtml" изнутри ui:composition и просто оставьте <ui:composition....<h:form...</h:form></ui:composition>
 – 
Daniel
15 Янв 2013 в 11:19
Спасибо, я делаю это, но не решаю свою проблему :(
 – 
faranak
15 Янв 2013 в 11:27

1 ответ

Лучший ответ

Избавьтесь от всех вложенных форм (<h:form),

Я заметил, что у тебя их много

На странице не может быть следующей структуры

<h:form.....
  some elements....
  some elements....
  some elements....
  <h:form....

Например, вы можете разместить один <h:form, который будет обертывать <p:tab

Или поместите <h:form внутри каждого <p:tab

Другой способ проверить, что у вас нет вложенных <h:form - это выполнить просмотреть исходный код на своей странице и посмотреть, есть ли у вас <form внутри <form (вложенные формы что баааад)


Обновить

Вы уверены, что вам нужны все эти <ui:define в диалоге? попробуйте удалить все <ui:define + template="./../template/masterTemplate.xhtml" изнутри ui:composition и просто оставьте

<ui:composition....
    <h:form...

    </h:form>
</ui:composition>
5
Daniel 15 Янв 2013 в 11:20
Я избавился от всех форм. И страница, которая открывается в диалоговом окне, имеет только одну , но не решила мою проблему !! и когда просто используйте одну форму h: на странице, которая включает макеты, при инициализации компонента макетов возникает ошибка и страница не отображается! поэтому я поместил тег для каждого слоя!
 – 
faranak
14 Янв 2013 в 18:02
Я не говорил вам избавляться от всех форм и оставлять только одну форму ... просто чтобы избавиться от вложенных форм ... вы можете опубликовать свой новый код ... но перед этим просто убедитесь, что вы этого не сделаете есть commandButtons вне формы ...
 – 
Daniel
14 Янв 2013 в 18:04
Я понял, сделал просто для проверки, не думал о проблеме тегов формы, ок, выложу свой новый код
 – 
faranak
14 Янв 2013 в 18:27
Совет: убедитесь, что у вас есть h:form внутри <p:dialog, а не наоборот ... stackoverflow.com/ a / 14051661/617373
 – 
Daniel
14 Янв 2013 в 18:33
Это диалоговое окно содержит тег , когда щелкает элементы меню, открывая страницу внутри диалогового окна, на которой эта страница имеет
 – 
faranak
14 Янв 2013 в 18:42