rendered属性不更新问题

jsf开发过程问题总结

rendered属性不更新问题

<h:form>
    ...
    <h:commandButton value="Login" action="#{login.submit}">
        <f:ajax execute="@form" render=":text" />
    </h:commandButton>
</h:form>
<h:outputText id="text" value="You're logged in!" rendered="#{not empty user}" />

如上图,当我想要通过ajax结合rendered的属性进行有条件的动态更新显示组件时,这种方式并没有起到动态更新的操作。
这是因为在此页面初始化时,由于rendered的条件不满足所以初始化时并没有渲染outputText组件,所以在后面便不可能通过ajax重新渲染(更新)组件。 必须始终呈现组件,然后ajax才能重新呈现它。 Ajax使用JavaScriptdocument.getElementById()查找需要更新的组件。 但是,如果JSF尚未初始化过该组件,那么JavaScript将找不到任何要更新的内容。
解决方案,可以简单地引用一个总是渲染的父组件:

<h:form>
    ...
    <h:commandButton ...>
        <f:ajax ... render=":text" />
    </h:commandButton>
</h:form>
<h:panelGroup id="text">
    <h:outputText ... rendered="#{not empty user}" />
</h:panelGroup>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值