0

我有一个具有方法签名属性的组件。可以激活,但是如果我把它放在a里面<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,就像删除一样,它根本不起作用。但是如果我将“删除”命令链接从<h:datatabel/> .it 中取出,它可以成功调用支持方法。太难过了!

谁能告诉我是否<h:datatable/>可以屏蔽 .i 发现如果我将这些代码放入<h:form/>.it 中也可以调用!你能告诉我原因吗!

4

1 回答 1

1

您需要在表单提交请求期间保留与显示初始表单的请求期间完全相同的数据模型(即,您已由 的value属性引用的数据模型)。<h:dataTable>这些症状表明您正在使用请求范围的 bean,并且数据模型的加载基于表单提交期间缺少的某些请求参数和/或在 bean 的(后)构造期间未完成加载。

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

于 2011-05-29T03:13:16.480 回答