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

时间:2011-05-28 12:37:12

标签: jsf composite-component

我有一个具有方法签名属性的组件。它可以被激活,但如果我把它放在<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/>中删除.it可以成功调用支持方法。真是太沮丧了!

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

1 个答案:

答案 0 :(得分:1)

在表单提交请求期间,您需要保留与请求期间完全相同的数据模型(即value的{​​{1}}属性所引用的数据模型)显示初始形式。这些症状表明您正在使用请求范围的bean,并且数据模型的加载基于某些请求参数,该参数在表单提交期间缺失和/或在bean(post)构造期间未完成加载。 / p>

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