Bean方法不包含在
包含的JSF页面上我有一个<p:commandButton>
,它完成了一个包含iframe的对话框。 iframe包含另一个包含菜单的页面。我在单击commandbutton时编写了一个actionListener,一个方法将执行并使菜单呈现为false。令人惊讶的是,渲染变量的get方法没有调用。这是我的示例代码。Bean方法不包含在<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;
}
的不包括在作为其父页相同的HTTP请求指定的页面。它将包含在全新的独立HTTP请求中。也就是说,它是由网页浏览器执行的,而不是网页服务器。在效果中,框架页面会得到自己的全新请求范围的bean,它与父页面不一样。此外,新的HTTP请求也不包含任何关于JSF视图的信息,所以它也会得到它自己的视图范围的bean实例,如果有的话。只有它们在同一个HTTP会话中运行,它们才可以共享同一个会话作用域bean实例。但是让bean会话范围产生严重后果。
尽管如此,这种方法没有任何意义。这是的错误目的。改为使用<ui:include>
。如果您唯一担心的是滚动条等,只需在固定大小的块元素(如<div>
)上投掷CSS overflow:scroll
即可。
无关到混凝土问题,你的<p:commandButton action>
是不正确的,由于不存在EL表达括号并因此引入了一个主要的红色的鲱鱼。并且,rendered
属于"true"
的String
值是令人讨厌的,因为它对于它所保存的值使用了错误的数据类型。如果你想要一个布尔类型,只需使用boolean
而不是String
。我可以想象,这一切都是在黑暗中摆弄的结果,然后不小心将代码片段复制到问题中,而没有仔细测试它作为MCVE。将来请不要这样做。另请参阅https://stackoverflow.com/tags/jsf/info。
除了做@BalusC的做法
splcCreate是一个字符串字段。
EL表达式
rendered="#{!(createAssociationsBean.splcCreate)}"
与splcCreate是一个布尔表达式
更好