【发布时间】:2015-04-29 22:22:30
【问题描述】:
我在表单中有命令按钮。那些在页面加载时呈现的是调用动作,
但是<p:fragment> 标记中的那两个在回发时呈现并且不起作用。
<h:form>
<p:commandButton action="#{bean.actionA()}"/>
<p:commandButton actionListener="#{bean.actionB()}"/>
<p:fragment rendered="#{not empty bean.field}">
<p:commandButton action="#{bean.actionA()}"/>
<p:commandButton actionListener="#{bean.actionB()}"/>
</p:fragment>
<ui:include ..>
...
<p:commandLink update="@form">
<i class="fa fa-folder"></i>
<f:setPropertyActionListener value="#{data.document}" target="#{bean.field}" />
</p:commandLink>
</ui:include>
</h:form>
我是 JSF 的菜鸟。我知道这个问题与 JSF 生命周期有关,但我找不到可行的解决方案。
我的 bean 是视图范围,我使用 primefaces 5.1。
这是假设工作还是我使用了错误的方法来显示/隐藏按钮?
谢谢。
编辑:
经过一些测试,它接缝即使在调用操作时也会在带有null==bean.field 的 bean 上调用。
这对我来说没有意义,因为在更新完成并显示隐藏按钮后,我得到了渲染值 #{bean.field.name}。
我错过了什么?
将update=@form 更改为update=@all 时效果相同。
感谢任何帮助。
我的具有会话范围的 bean 很喜欢这个。在这种情况下,SessionScoped 按钮正在工作。为什么视图范围不够?
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.event.ActionEvent;
import javax.faces.view.ViewScoped;
import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
//TODO: change to @ViewScoped
@ManagedBean(name="bean")
@SessionScoped
public class Bean extends BeanBase {
private static final long serialVersionUID = 1L;
private static final Logger LOGGER = LogManager.getLogger(Bean.class.getName());
@PostConstruct
protected void init() {
super.init();
}
public void actionA() {
LOGGER.debug("Action A triggerd!");
}
public void actionB( ActionEvent event) {
LOGGER.debug("Action B event triggerd!");
super.edit(event);
}
}
【问题讨论】:
-
@stg 还是同样的问题。当我用
p:outputPanel或f:subview替换p:fragment时,按钮不会触发。 -
正如here 所写,它应该适用于“update=@form”。这正是我正在做的。我的表单更新是从复合组件调用的。但它的工作原理是显示隐藏的按钮。但是按钮操作没有正确设置。
-
@stg 我如何测试那个和哪个表达式。如何找到它? Bean 在视图范围内。它适用于工作按钮的操作,
-
@stg 我已经用
bean.fieldsetter 和 update 调用更新了代码。我尝试了日志记录,但我不知道如何将它们分成 JSF 阶段。在页面加载时,我有 12 个 'bean.field' getter,其中 3 个为空。单击按钮时,我有 3 个 null 返回 getter cal。不同之处仅在于在一种情况下触发了对 bean 的操作。希望这会有所帮助。 -
它接缝即使在调用操作时也会在带有
null==bean.field的bean 上调用。我错过了什么?
标签: jsf jsf-2 primefaces jsf-2.2