我有一个< p:commandButton>
,oncomplete会给出一个包含iframe的对话框。 iframe包含另一个包含菜单的页面。我在单击commandbutton时编写了一个actionListener,一个方法将执行并使菜单呈现为false。令人惊讶的是,渲染变量的get方法不是调用。这是我的示例代码。
< p:commandButton oncomplete =“PF('Loc')。show();”
行动= “bean.rendermethod” 
更新= “createDialog” >

 < p:dialog closeOnEscape =“true”
 widgetVar = “LOC” 
模态= “真” 
动态= “真” 
 ID = “createDialog” 
可最小化= “假” 
最大化= “真” 
高度= “100%” 
宽度= “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:对话框>
< / P:的commandButton>
 代码>


 loc.xhtml:
& #xA;
 < p:menubar autoSubmenuDisplay =“true”
 effectDuration = “0” 
渲染= “#{(createAssociationsBean.splcCreate)!}” >

 ...

< / p:menubar>



 Java代码:
&# xA;
 public void renderMethod(){
 setSplcCreate(“true”);
}

 public String getSplcCreate(){
 return splcCreate;
}

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



答案 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是一个布尔表达式,更好