【问题标题】:AJAX not rendering in JSFAJAX 不在 JSF 中呈现
【发布时间】:2014-12-18 20:42:07
【问题描述】:

对不起我的英语。

方法delete来自TestMB

public String delete(Post post) {
    getDao().delete(post);
    return "success";
}

test.xhtml:

<h:form id="form1">
    <ui:repeat value="#{TestMB.entityList}" var="entityList">
        <p>
            #{entityList.name}

            <h:commandLink action="#{TestMB.delete(entityList)}">
                del
                <f:ajax render=":form1"/>
            </h:commandLink>
        </p>
    </ui:repeat>
</h:form>

当我点击链接“del”时页面没有刷新。如果我再次单击,页面将刷新。为什么?

如果我使用来自TestMB 的新方法delete

private String txt1="test";

public String delete() {

    try{
        Thread.sleep(Long.valueOf("10000"));
    }catch(Exception ex){}

    txt1="";

    return "";
}

还有新的test.xhtml

<h:form id="form1">

    #{testMB.txt1}

    <h:commandLink action="#{testMB.delete}">
        del
        <f:ajax render=":form1"/>
    </h:commandLink>
</h:form>

我点击链接“del”,10 秒后页面刷新。

为什么不能在第一种情况下工作?

【问题讨论】:

  • 点击链接后,页面应该导航到success.xhtml(无论后缀是什么 - 显示的隐式导航)。 TestMB 在第一种情况下看起来很不稳定。它应该以小写字母开头。当您在第一种情况下单击链接时,是否正确调用了该操作方法?如果它被正确调用,它应该导航到目标页面,除非中间有一些错误/异常。
  • Metod delete 在第一种情况下有效,它从数据库中删除条目。我在 glassfish 日志中看不到错误。

标签: ajax jsf jsf-2


【解决方案1】:

我发现了问题。

public List<Entity> getEntityList() {

    //if(entityList == null){
        entityList=getDao().findAll(getPageRequest());
    //}

    return entityList;
}

【讨论】:

  • 这是什么?你在问题中没有提到这个未知的东西。
  • 为什么?我写了&lt;ui:repeat value="#{TestMB.entityList}" var="entityList"&gt;
  • 嗯,实际上很难想象你是如何解决实际问题的——将问题内容与这里给出的答案进行比较,没有人可以想象编写这种代码可以解决“页面刷新”问题。附带说明一下,在 getter 方法中编写业务逻辑是一种不好的做法。 Getter 方法本质上会被多次调用。因此,该 DAO 方法被执行多次导致任何 SQL 语句(如果有)在数据库上执行多次 findAll() DAO 方法,这自然是非常昂贵的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 2011-05-30
  • 1970-01-01
相关资源
最近更新 更多