为什么复合组合在 <h:datatable/> 中不调用



我有一个组件,它有一个方法签名属性。它可以被激活,但如果我把它放在<h:datatable> <h:column/>中并触发这个组件,它就不起作用了。

当我再次刷新这个页面时,或者当我把它放在另一个地方时,它可以被成功调用。如果有人能告诉我原因,我将不胜感激!

这是我的代码

<h:column>
                    <f:facet name="header">op:</f:facet>
                    <h:commandLink value="alter" action="#{userSession.alterAction}"
                        rendered="#{userSession.user.power.powerID == 1}">
                        <f:param name="beanId" value="#{book.bookID}" />
                        <f:param name="class" value="#{BookBean}" />
                    </h:commandLink>
                    <h:commandLink action="#{userSession.detailAction}" value="detail"
                                   rendered="#{userSession.user != null}">
                        <f:param name="beanId" value="#{book.bookID}" />
                        <f:param name="class" value="#{BookBean}" />
                    </h:commandLink>
                    <h:commandLink action="#{bookAction.bookDelAction}"
                        onclick="return confirm('are you sure?')" value="delete"
                        rendered="#{userSession.user.power.powerID == 1}">
                        <f:param name="beanId" value="#{book.bookID}" />
                    </h:commandLink>
                </h:column>

当我点击其中一个操作时,这个manageredBean#{bookAction}就是requestScope,就像删除一样,它根本不起作用。但如果我把"delete"命令链接放在<h:datatabel/>之外,它可以成功地调用backing方法。太令人沮丧了!

谁能告诉我<h:datatable/>是否可以屏蔽。我发现如果我把这些代码放在<h:form/>中,它也可以调用!你能告诉我原因吗!

在表单提交请求期间,您需要在中保留与在显示初始表单请求期间完全相同的数据模型(即<h:dataTable>value属性所引用的数据模型)。症状表明您使用的是请求范围的bean,数据模型的加载是基于表单提交过程中丢失的一些请求参数和/或bean(后)构建过程中没有进行加载。

将bean放入视图范围和/或重新安排数据加载逻辑应该可以修复它。

相关内容

  • 没有找到相关文章

最新更新