一种轻松检查元素是否在jsf2中呈现的方法

时间:2012-06-28 13:36:04

标签: jsf jsf-2 render

我有一个按钮,它应该关闭一个模态面板并渲染几个元素。

是否有一种简单的方法可以检查按下按钮后是否呈现了元素?

示例按钮:

<a4j:commandButton onclick="#{rich:component('modal')}.hide();"  
    style="background-repeat:no-repeat;width:18px;height:18px;" 
    image="includes/images/close.gif"       
        render=":id1 :id2">
        <f:setPropertyActionListener target="#{Controller.attribute}" value="false" />
</a4j:commandButton>

2 个答案:

答案 0 :(得分:1)

  

我有另一个按钮,在未渲染的div上没有“工作”。

提交表单时,必须保留所有按钮的父组件的rendered属性的条件。因此,它不仅应该在使用按钮显示表单的请求期间评估true,还应该在处理表单提交的请求期间评估true。最简单的方法是通过@ViewScoped将支持bean放在视图范围内。

此外,如果您重新呈现的组件又包含<h:form>,则需要将<h:form>的客户端ID明确添加到render属性。例如。当客户ID id1的组件又有<h:form id="formOfId1">时。

render=":id1 :id2 :formOfId1"

您可以通过浏览webbrowser开发人员工具集中的HTTP流量来调试这一切(按Chrome / IE9 / Firebug中的F12并查看“网络”部分)。

另见:

答案 1 :(得分:0)

我遇到了同样的问题。我的解决方案是在我想要渲染的元素内显示当前时间。

例如,如果要渲染面板,只需在该面板中粘贴以下代码段:

<h:outputText value="#{session.lastAccessedTime}"> 
    <f:convertDateTime pattern="yyyy-MM-dd HH:mm:ss.SSS" type="date" /> 
</h:outputText> 

如果按钮点击后更新时间,那么显然组件已呈现。但情况恰恰相反吗?如果时间没有更新,这是否意味着组件未呈现?如果组件已正确呈现,但显示的时间被冻结到首次访问页面时该怎么办?我对此有一点疑问,所以我刷新了页面,时间也改变了。因此显示的时间不会冻结到初始时刻。

另请注意,有多种方法可以获得时间;如果您不想使用会话时间,可以在辅助bean中设置属性,并将其初始化为新的Date()