programing

JSF 동적에는 Ajax 요청 사용이 포함됩니다.

css3 2023. 9. 7. 21:58

JSF 동적에는 Ajax 요청 사용이 포함됩니다.

JSF2에서는 Ajax 요청(예: PrimeFaces p:commandButton)을 동적으로 사용하여 ui:include의 src 값을 변경할 수 있습니까?감사해요.

<h:form>                        
    <h:commandLink value="Display 2" action="#{fTRNav.doNav()}">
        <f:setPropertyActionListener target="#{fTRNav.pageName}" value="/disp2.xhtml" />
    </h:commandLink>
</h:form>

<ui:include src="#{fTRNav.pageName}"></ui:include>

그게 지금 제가 가지고 있는 것입니다.(p:commandButton을 사용하여) Ajax로 만드는 것이 가능합니까?

다른 답변에서 제안한 JSTL 태그는 필요하지 않고 재사용이 잘 되지 않습니다.

다음은 순수 JSF를 사용하는 기본적인 예입니다(서블릿 3.0 / EL 2.2를 실행한다고 가정할 때, 그렇지 않으면 실제로 사용해야 합니다).<f:setPropertyActionListener>질문에서와 같이):

<h:form>
    <f:ajax render=":include">
        <h:commandLink value="page1" action="#{bean.setPage('page1')}" />
        <h:commandLink value="page2" action="#{bean.setPage('page2')}" />
        <h:commandLink value="page3" action="#{bean.setPage('page3')}" />
    </f:ajax>
</h:form>

<h:panelGroup id="include">
    <ui:include src="#{bean.page}.xhtml" />
</h:panelGroup>

와 함께

private String page;

@PostConstruct
public void init() {
    this.page = "page1"; // Ensure that default is been set.
}

// Getter + setter.

다음은 Mnaged Bean을 사용하여 서브 콘텐츠를 동적으로 렌더링하는 방법입니다.먼저 중앙에 페이지를 설정합니다(메뉴 트리거에 의해 변경됨).private String name="/main_pages/mainpage.xhtml", 그런 다음 하위 메뉴를 클릭할 때마다 HelloBean이 재설정됩니다."name"내용은 다음과 같이 업데이트됩니다.update=":content"- 그런 다음 Bean에서 새 이름을 검색합니다.

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




        <h:head>
            <f:facet name="first">
                <meta content='text/html; charset=UTF-8' http-equiv="Content-Type"/>

            </f:facet>
        </h:head>

        <h:body>

            <p:layout fullPage="true">

                <p:layoutUnit position="north" size="150" resizable="true" closable="true" collapsible="true">
                    <h1>Madeline<br>shop</br></h1>
                </p:layoutUnit>

                <p:layoutUnit position="south" size="100" closable="true" collapsible="true">
                    Zapraszamy do odwiedzania naszego biura!
                </p:layoutUnit>

                <p:layoutUnit position="west" size="175" header="Menu" collapsible="true">
                    <h:form>
                    <p:menu>
                            <f:ajax render=":content">
                            <p:menuitem value="O naszej agencji" action="#{helloBean.setName('/main_pages/onas.xhtml')}" update=":content" />
                            <p:menuitem value="Ubezpieczenia pojazdów" action="#{helloBean.setName('/main_pages/ubpoj.xhtml')}" update=":content" />
                            <p:menuitem value="Ubezpieczenia majątkowe" action="#{helloBean.setName('/main_pages/ubmaj.xhtml')}" update=":content" />
                            <p:menuitem value="Ubezpieczenia na życie" action="#{helloBean.setName('/main_pages/ubnaz.xhtml')}" update=":content" />
                            <p:menuitem value="Zapytaj" action="#{helloBean.setName('/main_pages/zapytaj.xhtml')}" update=":content" />
                            <p:menuitem value="Kontakt" action="#{helloBean.setName('/main_pages/kontakt.xhtml')}" update=":content" />
                            </f:ajax>
                    </p:menu>
                    </h:form>
                </p:layoutUnit>

                <p:layoutUnit position="center">

                    <br></br><br></br>
                    <p:panel id="content">
                                        <ui:include src="#{helloBean.name}" />
                    </p:panel>       

                </p:layoutUnit>

            </p:layout>

        </h:body>



</html>

관리되는 빈:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import java.io.Serializable;
/**
 *
 * @author root
 */
@ManagedBean
@RequestScoped
public class HelloBean implements Serializable {

    /**
     * Creates a new instance of HelloBean
     */
    private static final long serialVersionUID = 1L;

    private String name="/main_pages/mainpage.xhtml";

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

당신은 사용해야 합니다.<c:if test="condition">usi:jax 버튼을 클릭하면 usi:jax 버튼이 있는 패널이 새로 고쳐집니다.

:

먼저 문서에 다음 네임스페이스를 삽입하여 jstl core taglib이 포함되었는지 확인합니다.

<html xmlns:c="http://java.sun.com/jsp/jstl/core>"

그러면, 당신은 사용할 수 있습니다.<c:if>다음과 같이 태그를 지정합니다.

<c:if test="#{!logBean.loggedIn}">
    <ui:include src="loginpage.xhtml" />
</c:if>
<c:if test="#{logBean.loggedIn}">
    <ui:include src="home.xhtml" />
</c:if>

언급URL : https://stackoverflow.com/questions/6219202/jsf-dynamic-include-using-ajax-request