【问题标题】:Use both JSF ajax and setPropertyActionListener tags on the same button在同一个按钮上同时使用 JSF ajax 和 setPropertyActionListener 标签
【发布时间】:2011-10-22 17:08:01
【问题描述】:

我希望当用户点击一个按钮时会发生 2 件事:

  1. 首先触发setPropertyActionListener,以更新我的bean的属性
  2. 然后进行 ajax 调用以执行 bean 中的方法

看来我必须在f:setPropertyActionListener标签和f:ajax标签之间进行选择才能嵌套在commandButton标签内。

有没有办法同时执行ajax调用和属性更新?

非常感谢!

编辑:我忘了说我不想执行表单,我想使用 ajax 监听器,这是我的代码:

<h:commandLink styleClass="blue-button" value="+">
  <f:setPropertyActionListener target="#{tvShowForm.selected}" value="#{tvShow.externalId}" />
  <f:ajax event="click" listener="#{tvShowForm.add}" />
</h:commandLink>

使用此代码,f:setPropertyActionListener 不会被执行。

编辑 2:

我将代码修改为以下内容,使用操作表单方法而不是侦听器。现在它只有在我没有在ajax标签上指定一个事件属性时才有效,但是当我指定一个时,动作方法不会被执行。

<h:commandLink action="#{tvShowForm.add}" styleClass="blue-button" value="+">
  <f:setPropertyActionListener target="#{tvShowForm.selected}" value="#{tvShow.externalId}" />
  <f:ajax event="click" />
</h:commandLink>

【问题讨论】:

  • 他们会的。具体问题是什么?

标签: java ajax jsf


【解决方案1】:

仅适用于我在 Tomcat 7.0.19 和 Glassfish 3.1.1 上使用 Mojarra 2.1.3。

我使用了这个相关的视图:

<h:form>
    <h:commandButton value="submit" action="#{bean.submit}">
        <f:setPropertyActionListener target="#{bean.value}" value="foo" />
        <f:ajax />
    </h:commandButton>
</h:form>

使用这个相关的 bean:

private String value;

public void submit() {
    System.out.println("Value: " + value);
}

// Getter/setter.

在 ajax 提交上打印以下内容:

值:foo

您的问题是由您遗漏的其他问题引起的。


更新:根据您的更新

我忘了说我不想执行表单,我想使用 ajax 监听器,这是我的代码:

我真的不明白你为什么不想要“表单执行”。您正在提交表单。您只省略了操作方法,而是在 ajax 事件侦听器中执行业务工作。动作侦听器方法不打算做任何业务工作,它们最多用于一些自包含的处理或日志记录工作。依赖于模型的业务工作应该在 action 方法中完成,它就是这样做的。

【讨论】:

  • 谢谢。我忘了说我正在尝试使它与单击事件的 ajax 侦听器一起工作。在这种情况下, f:setPropertyActionListener 不会被执行。
  • 它被执行,但只在 ajax 监听方法之后执行。只需使用action 方法。另请参阅答案更新。
  • 经过一番思考,我认为您错误地认为action 方法永远不会异步。这不是真的。单独添加&lt;f:ajax&gt; 使其已经异步。
  • 谢谢!我在我的问题中修改了我的代码,但是如果我为 ajax 标记指定一个“事件”属性,则不会进行调用。你知道为什么吗?
  • 这显然是错误的事件。应该是action。不用管它,它已经是默认事件了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多