【问题标题】:JSF button is not working after AJAX callAJAX 调用后 JSF 按钮不起作用
【发布时间】:2013-05-07 08:14:55
【问题描述】:

我有这个 JSF 按钮,当它被按下时会调用 Java 方法:

<h:commandButton id="editdata" value="HiddenDelete" style="position:absolute; bottom:25px; right:650px;" actionListener="#{bean.saveData}" rendered="#{bean.editable}">
    <f:ajax render="@form" execute="@form"></f:ajax>
</h:commandButton>

public void saveData() throws SQLException
{
.....
}

当我进行 AJAX 调用时,按钮无法正常工作。你能帮我找出为什么在 AJAX 调用后没有调用 Java 方法吗?

【问题讨论】:

  • 请排除stackoverflow.com/a/2120183的原因或发布SSCCE。当前代码不是 SSCCE 风格的。当复制粘贴您的代码并手动添加您从问题中省略的最小必需代码以使其按照规范/文档工作时(例如,添加缺少的 ActionEvent 参数,但应该抛出异常),它工作正常对我来说(可能还有其他人)。要了解如何创建合适的 SSCCE,请仔细阅读stackoverflow.com/tags/jsf/info 如果没有 SSCCE,您的问题基本上无法回答。
  • 如果您从开发人员的角度而不是从最终用户的角度详细说明问题,您将进一步帮助您自己和我们。您只是说“它不起作用”,就好像您是最终用户一样。这个不对。你应该知道整个过程中的哪一步失败了。触发 DOM 点击事件?准备ajax请求?发送ajax请求?用JSF解码ajax请求?识别点击的按钮?排队操作事件?调用动作事件?等等。
  • 彼得,您是否尝试过将事件传递给您的方法(如我的回答中所建议的那样,BalusC 也提到过)?如果是这样,您能否分享您的更新代码和结果案例? “工作不正常”是不够的。也分享bean的注解和saveDataeditable的实现。
  • 请写下您的jsf页面的详细代码及其作用域,您的xhtml代码是否封装到表单中?

标签: jsf jsf-2


【解决方案1】:

你没有通过事件:

public void saveData(AjaxBehaviorEvent event) { ... }

另外,你希望你抛出的Exception 会发生什么?你不应该抓住它吗?

try {
    // logic
}
catch(SQLException ex) {
    FacesContext facesContext = FacesContext.getCurrentInstance(); 
    FacesMessage facesMessage = new FacesMessage( 
        "There was an error, ...."); 
    facesContext.addMessage(null, facesMessage);
}

这将由&lt;h:messages /&gt; 以 HTML 格式打印。

【讨论】:

  • 如果您按照我的示例中给出的代码实现了代码,那么您的问题可能是由其他地方引起的。您是否使用&lt;h:head&gt;&lt;/h:head&gt; 标签而不是&lt;head&gt;&lt;/head&gt;?普通的 HTML 标记不会包含 javax.faces.jsf.js,这是一个必要的库,可以让您使用 ajax。
  • 我快速浏览了一下,唯一让我想到的是您指的是以大写字母开头的 bean,这不是最佳实践材料。尽管我假设这不会导致您出现问题,因为您从 bean 中获取值就好了,对吧?我唯一可以添加的是提供SSCCE,因为我无法指出任何问题。尝试创建一个尽可能短的 bean/html 仍然包含您的问题。
  • 没错,OP 发布了一个非常糟糕的代码 sn-p,但问题更可能是由于 bean 是请求范围的和/或他忽略了 ActionEvent 参数而忽略了日志和 ajax 响应以获取有关任何可能异常的任何线索。使用&lt;f:ajax&gt; 绝对不需要将动作方法移动到&lt;f:ajax listener&gt;
  • @BalusC 你是对的。尽管在 bean 是请求范围的情况下仍应调用该方法。这可能是由于提交表单时rendered-condition 为 false 造成的吗?
  • @PeterPenzov:正如我在编辑中提到的,你的 bean 是可序列化的吗?
猜你喜欢
  • 2020-01-20
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 2016-08-19
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多