CommandLink与JSF Ajax需要2次点击

时间:2013-05-24 19:15:26

标签: java ajax jsf

我不认为这是AJAX与表单中的表单的JSF问题,因为我只有一个表单。

我查看了有关Ajax和JSF渲染内容的线程,我尝试了多种解决方案,但没有运气。

任何人都可以看到我遗漏的可能性很明显: - )

由于

的index.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">

<h:head>
    <title>Manual</title>
    <h:outputStylesheet name="style.css" library="css" />
</h:head>
<h:body>
    <div id="page">
        <h:form id="myform"> 
        <div class="header" >
            <h:graphicImage library="img" name="Logo.gif" alt="Logo"/>
            <h1>Manual</h1>
        </div>

            <div class="menu">
        </div>

        <div class="nav">

            <h:outputText value="Navigation 1"/><br/>
            <p:commandLink value="Chapter100" action="#{contentBean.BuildContent}" update="content" >
                <f:ajax process="@this" render=":content" />
            </p:commandLink>

                    <!-- Add NewLine between links --> 
                    <h:outputText value="&#10;" />
            </div>
            </h:form>
            <div class="mycontent">
                <h:panelGroup id="content">
                    <h:outputText value="#{contentBean.content}" >
            </h:outputText>
                </h:panelGroup>
            </div>
        </div>
    </h:body>
</html>

@ManagedBean(name="contentBean")
@ViewScoped
public class ContentBean implements Serializable{
    private List<String> lTocInfo = new ArrayList();

    private String content = "Steve Newer 002 Content";

    public String getContent() 
    {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public void BuildContent() throws Exception
    {
        this.setContent("Steve made it back from database");
    }     
}

2 个答案:

答案 0 :(得分:1)

不要在primefaces按钮内使用 <f:ajax>,因为默认情况下它是一个ajax请求(除非你想关闭ajax请求,你可以将ajax属性设置为false)。您可以使用更新和流程属性。

答案 1 :(得分:0)

我相信要解决这个问题,您还可以在链接中使用ajax中的以下代码:

<p:commandLink value="Chapter100" action="#{contentBean.BuildContent}">
                <f:ajax execute="@form" event="blur" render="content" />
</p:commandLink>