在<iframe>包含的JSF页面上未调用Bean方法

时间:2015-11-16 15:21:07

标签: jsf iframe el conditional-rendering

我有一个&lt; p:commandButton&gt; ,oncomplete会给出一个包含iframe的对话框。 iframe包含另一个包含菜单的页面。我在单击commandbutton时编写了一个actionListener,一个方法将执行并使菜单呈现为false。令人惊讶的是,渲染变量的get方法不是调用。这是我的示例代码。

&#xA;&#xA;
 &lt; p:commandButton oncomplete =“PF('Loc')。show();”&#xA;行动= “bean.rendermethod” &#XA;更新= “createDialog” &GT;&#XA;&#XA; &lt; p:dialog closeOnEscape =“true”&#xA; widgetVar = “LOC” &#XA;模态= “真” &#XA;动态= “真” &#XA; ID = “createDialog” &#XA;可最小化= “假” &#XA;最大化= “真” &#XA;高度= “100%” &#XA;宽度= “100%” &#XA; style =“background-color:rgb(232,232,232)!important;”&gt;&#xA;&#xA; &lt; iframe frameborder =“0”height =“768”width =“100%”&#xA; SRC = “loc.faces” &#XA; name =“someName”id =“someId”scrolling =“auto”/&gt;&#xA; &LT; / P:对话框&GT;&#XA;&LT; / P:的commandButton&GT;&#XA;  
&#XA;&#XA;

loc.xhtml:

& #xA;&#xA;
 &lt; p:menubar autoSubmenuDisplay =“true”&#xA; effectDuration = “0” &#XA;渲染= “#{(createAssociationsBean.splcCreate)!}” &GT;&#XA;&#XA; ...&#xA;&#xA;&lt; / p:menubar&gt;&#xA;  
&#xA;&#xA;

Java代码:

&# xA;&#xA;
  public void renderMethod(){&#xA; setSplcCreate(“true”);&#xA;}&#xA;&#xA; public String getSplcCreate(){&#xA; return splcCreate;&#xA;}&#xA;&#xA; public void setSplcCreate(String splcCreate){&#xA; this.splcCreate = splcCreate;&#xA;}&#xA;  
&#xA;

2 个答案:

答案 0 :(得分:2)

<iframe>不会在与其父页面相同的HTTP请求中包含指定的页面。它将包含在一个全新且独立的HTTP请求中。也就是说,它是由webbrowser执行的,而不是webserver。在效果中,框架页面将获得自己的全新请求范围的bean,它与父页面的bean不同。

此外,新的HTTP请求也不包含有关JSF视图的任何信息,因此它也会获得自己的视图范围bean实例(如果有的话)。只有当它们在同一个HTTP会话中运行时,它们才可以共享同一个会话范围的bean实例。但是使bean会话成为一个严重的后果。

尽管如此,这种方法没有任何意义。这是<iframe>的错误目的。请改用<ui:include>。如果您唯一担心的是滚动条等,只需将CSS overflow:scroll放在固定大小的块元素上,例如<div>

无关具体问题,由于缺少EL表达支撑,您的<p:commandButton action>不正确,因此引入了一个主要的红鲱鱼。并且,引用rendered String"true"的{​​{1}}属性是令人讨厌的,因为它使用了错误的数据类型来保存它的值。如果你想要一个布尔类型,只需使用boolean而不是String。我可以想象这一切都是在黑暗中摆弄,然后不小心将代码片段复制到问题中而不仔细测试MCVE。将来请不要这样做。另请参阅https://stackoverflow.com/tags/jsf/info

答案 1 :(得分:0)

除了做@BalusC&#39的方法

splcCreate是一个String字段。

el表达

 rendered="#{!(createAssociationsBean.splcCreate)}"
splcCreate是一个布尔表达式

更好