【问题标题】:why composite compoment does not invoke in the <h:datatable/>为什么复合组件不在 <h:datatable/> 中调用
【发布时间】:2011-05-28 12:37:12
【问题描述】:

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

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

这是我的代码

<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'命令链接放在&lt;h:datatabel/&gt;之外。它可以成功调用支持方法。好难过!

谁能告诉我&lt;h:datatable/&gt; 是否可以屏蔽.i 发现如果我将这些代码放在&lt;h:form/&gt; 中。它也可以调用!你能告诉我原因吗!

【问题讨论】:

  • 那么,普通的命令按钮有效吗?
  • 我测试它只是一个普通按钮。如果我不把它放在 它可以很好地工作!
  • 那么,问题不在于复合组件吗?

标签: jsf composite-component


【解决方案1】:

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

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

【讨论】:

  • 我使用 postConstruct 方法表明我没有丢失我的参数
  • 然后rendered 属性显然在处理表单提交期间评估了false。也验证一下。
  • 非常感谢!我知道你的意思,原因是因为 JSF 需要恢复视图。所以数据模型丢失了。并且呈现的是错误的。虽然我单击它但无法调用该操作。但是这个项目我使用焊接 @name 来识别manageBean .so 似乎@pageScope 没有用。我必须将所有数据发布到支持数据。有什么好主意吗?
猜你喜欢
  • 2016-08-02
  • 2011-04-27
  • 2014-12-18
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2012-08-15
相关资源
最近更新 更多