2015-11-16 7 views
0

У меня есть <p:commandButton>, который, в неполном, дает диалог, содержащий iframe. iframe содержит другую страницу, содержащую меню. Я написал actionListener при нажатии кнопки commandbutton, который выполнит метод, и сделает ложным отображение меню. Удивительно, что метод get метода для рендеринга не звонит. Вот мой пример кода.Методы Bean, которые не вызываются на странице JSF, которая включена в <iframe>

<p:commandButton oncomplete="PF('Loc').show();" 
       action="bean.rendermethod" 
       update="createDialog"> 

    <p:dialog closeOnEscape="true" 
       widgetVar="Loc" 
       modal="true" 
       dynamic="true" 
       id="createDialog" 
       minimizable="false" 
       maximizable="true" 
       height="100%" 
       width="100%" 
       style="background-color:rgb(232, 232, 232) !important;"> 

     <iframe frameborder="0" height="768" width="100%" 
       src="loc.faces" 
       name="someName" id="someId" scrolling="auto" /> 
    </p:dialog> 
</p:commandButton> 

loc.xhtml:

<p:menubar autoSubmenuDisplay="true" 
      effectDuration="0" 
      rendered="#{!(createAssociationsBean.splcCreate)}"> 

    ... 

</p:menubar> 

Java код:

public void renderMethod() { 
    setSplcCreate("true"); 
} 

public String getSplcCreate() { 
    return splcCreate; 
} 

public void setSplcCreate(String splcCreate) { 
    this.splcCreate = splcCreate; 
} 

ответ

2

не включает указанную страницу в том же запросе HTTP в качестве его родительской страницы. Он будет включен в новый и независимый HTTP-запрос. А именно, он выполняется веб-браузером, а не веб-сервером. В эффектах на обрамленной странице будет создан свой собственный новый бланк с запросом, который не совпадает с родительской.

Кроме того, этот новый HTTP-запрос также не содержит никакой информации о представлении JSF, поэтому он также получит свой собственный экземпляр bean-объекта, если он есть. Только если они выполняются в одном и том же HTTP-сеансе, они могут совместно использовать один и тот же экземпляр компонента с областью сеанса. Но сделать сеанс сеанса бобов имеет серьезные последствия.

Тем не менее, этот подход не имеет никакого смысла. Это неправильная цель . Вместо этого используйте <ui:include>. Если ваша единственная проблема связана с полосами прокрутки и т. Д., Просто введите CSS overflow:scroll на элемент фиксированного размера, например <div>.


Unrelated к конкретной проблеме, ваш <p:commandButton action> не правильно из-за отсутствия скобок выражения EL и, таким образом, представляет большую красную сельдь. И, атрибут rendered, ссылающийся на значение String"true", является неприятным, так как использует неправильный тип данных для значения, которое он имеет. Если вы хотите иметь тип boolean, просто используйте boolean вместо String. Я могу себе представить, что все это результат возиться в темноте, а затем небрежно копировать фрагмент кода в вопрос без тщательного тестирования его как MCVE. В будущем, пожалуйста, не делайте этого. См. Также https://stackoverflow.com/tags/jsf/info.

0

В дополнение к выполнению захода на посадку @BalusC «s

splcCreate является полем типа String.

эль выражение

rendered="#{!(createAssociationsBean.splcCreate)}" 

лучше с splcCreate быть логическое выражение