java - JSF2.0 Ajax 导航模式

标签 java ajax jsf-2

非常感谢有关使用 JSF 2.0、PrimeFaces 和 Ajax 的 Web 应用程序模式的一些指导。我们当前的系统使用带有标准提交的 JSP,我们的应用程序中的每个功能页面都有 1 个 JSP。每个 JSP 为逻辑、导航和 EJB 调用调用一个 Action 类。使用相同的设置迁移到 JSF 将相对简单,即 1 个 xhtml 页面和相关的支持 bean 以及通过 do 方法完成的导航/逻辑。但是我们想通过 Ajax 提交,这让我很困惑。如果我加载 abc1.xhtml 并使用 ajax 提交,那么我会留在 abc1.xhtml,尽管我可能需要转到 abc2.xhtml。我想过在 1 个 xhtml 页面上有关联的表单,并使用呈现的属性来决定要显示的内容。这行得通,但我不喜欢在一页中有很多表格。理想情况下,我希望将每个页面分开,但不知道如何使用 Ajax 实现这一点。任何想法将不胜感激。

编辑 - 这是原始解决方案,但现在已在我下面的回答中进行了改进。这可行,但参数似乎存在问题。当我单击 AAA 或 BBB 链接时,我需要传递一个参数,以便 ViewController bean 知道单击了什么以及在何处设置目标页面。但是,如果我单击 AAA.xhtml 中的提交按钮,除非我还添加 <f:param name="tranID" value="AAA"/>,否则内容不会更改。到命令按钮。我以为我在 ViewController 构造函数中处理了一个空参数,但显然我遗漏了一些重要的东西。我唯一的想法是处理 URL。当我单击菜单链接时,它会将参数添加到 url ?tranID=AAA .如果我不将参数添加到后续提交中,这是否会有效地更改 url 并导致某种不匹配?

viewController.xhtml

<h:body>
    <h:panelGroup layout="block" id="transactionControl">

                    <h4>
                        <h:outputLink id="mfa" value="#{facesContext.externalContext.requestContextPath}/xhtml/viewController.xhtml" styleClass="menuLink">
                            <h:outputText value="AAA"></h:outputText>
                            <f:param name="tranID" value="AAA"/>
                        </h:outputLink>
                    </h4>

                    <h4>
                        <h:outputLink id="inq" value="#{facesContext.externalContext.requestContextPath}/xhtml/viewController.xhtml" styleClass="menuLink">
                            <h:outputText value="BBB"></h:outputText>
                            <f:param name="tranID" value="BBB"/>
                        </h:outputLink>
                    </h4>



    </h:panelGroup>

    <h:panelGroup layout="block" id="content" style="border-style: solid;">

        <ui:include src="#{viewController.destinationPage}.xhtml"></ui:include>

    </h:panelGroup>

</h:body>

AAA.xhtml

<h:body>
    <h:form prependId="false">
        <h:outputText value="Click the button to go to AAB"></h:outputText>

        <p>
            <p:commandButton id="submitButton" value="Go" ajax="true" actionListener="#{viewController.doAAAtoAAB}"
                             process="@form"
                             update="content">
                <f:param name="tranID" value="AAA"/>
            </p:commandButton>
        </p>

    </h:form>

</h:body>

AAB.xhtml

<h:body>
    <h:panelGroup layout="block" id="subContent">
        <h:outputText value="This is the AAB content"></h:outputText>
    </h:panelGroup>
</h:body>

BBB.xhtml 和 BBC.xhtml 同上

ViewController bean

package com.mcpplc.supportclient.webapp.managedBeans;


import javax.faces.context.FacesContext;    
import java.io.Serializable;

@ManagedBean
@ViewScoped
public class ViewController implements Serializable
{
    String destinationPage = "splash";
    FacesContext context;
    String callingTranID;

    public ViewController ()
    {
        context = FacesContext.getCurrentInstance();
        callingTranID = context.getExternalContext().getRequestParameterMap().get("tranID");

        if (callingTranID != null )
        {
            destinationPage = callingTranID;
        }
    }


    public void doAAAtoAAB()
    {
         destinationPage = "AAB";
    }

    public void doBBBtoBBC()
    {
         destinationPage = "BBC";
    }

    public String getDestinationPage()
    {
        return destinationPage;
    }

    public void setDestinationPage( String destinationPage )
    {
        this.destinationPage = destinationPage;
    }
}

最佳答案

我对你的建议是,除非你需要,否则不要使用 ajax。如果您需要在请求后实际调用另一个页面,那么使用 ajax 有什么意义?

尝试在应用程序工作流程中思考并在必要时应用 ajax。您认为 ajax 会令人困惑的情况是因为您可能不应该使用它

干杯

关于java - JSF2.0 Ajax 导航模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7767501/

相关文章:

java - 创建支持 MacBook Pro 触摸条的 Java 应用程序?

java - 使用 null 或默认构造函数初始化对象之间的区别

java - SLF4J:Hibernate3 与 RESTeasy

php - Web REPL环境

javascript - 在 JS (Wordpress) 中获取帖子数

java - Primefaces Extension 的 Dynaform 有什么动态

jsf-2 - ui 内的 Primefaces ManyCheckbox :repeat calls setter method only for last loop

java - 验证 Mockito 中同一方法的后续调用的参数

jquery:为什么$.get发送OPTION包?

css - 如何居中对齐 <p :notificationBar>