带有@Named支持bean的echo参数到facelets模板客户端

时间:2014-11-01 22:26:30

标签: jsf java-ee glassfish facelets backing-beans

getResponsesubmit的返回类型应该是什么,并且都是必要的?

当在firstFormSecondForm中输入猜测时,如何将该猜测回显到同一网页?

使用ajax,因此不会重新加载同一页

例如,加载一个新页面guessResults.xhtml,这就是猜测。

支持bean NextClient

package dur.beans;

import dur.jpa.Client;
import dur.jpa.ClientFacadeLocal;
import java.util.concurrent.atomic.AtomicInteger;
import javax.ejb.EJB;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;

@Named("nextClient")
@ApplicationScoped
public class NextClient implements NextClientLocal {

    @EJB
    private ClientFacadeLocal clientFacade;
    private AtomicInteger next = new AtomicInteger(1009);
    private AtomicInteger guess = new AtomicInteger(0);
    private final boolean correct = true;

    @Override
    public String getNext() {
        next.addAndGet(1);
        Client client = clientFacade.find(next.intValue());
        return client.toString();
    }

    @Override
    public void setGuess(int guessInt) {
        guess = new AtomicInteger(guessInt);
    }

    @Override
    public int getGuess() {
        return guess.intValue();
    }

    //not sure what do with these methods

    @Override
    public String getResponse() {
        return "the guess  of " + guess.intValue() + " is " + correct;
    }

    @Override
    public String submit() {
        return "the guess  of " + guess.intValue() + " is " + correct;
    }

}

facelets模板客户端next.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"
      >

    <h:head></h:head>
    <h:body>
        This and everything before will be ignored
        <ui:composition template="template.xhtml">
            <ui:define name="navigation">
                <ui:include src="menu.xhtml"/>
            </ui:define>
            <ui:define name="main">
                <h1>next bird</h1>
                <p>
                    #{nextClient.next}
                </p>

                <p>


                    <h:panelGroup id="firstPanel">
                        <h:form id="firstForm">
                            <h:outputLabel for="input" value="First form input" />
                            <h:inputText id="input" value="#{nextClient.guess}" required="true" />
                            <h:commandButton value="Submit form" action="#{nextClient.submit}">
                                <f:ajax execute="@form" render="@form :secondPanel :secondForm :messages" />
                            </h:commandButton>
                            <h:message for="input" />
                        </h:form>
                    </h:panelGroup>
                    <h:panelGroup id="secondPanel">
                        <h:form id="secondForm">
                            <h:outputLabel for="input" value="Second form input" />
                            <h:inputText id="input" value="#{nextClient.guess}" required="true" />
                            <h:commandButton value="Submit other form" action="#{nextClient.submit}">
                                <f:ajax execute="@form" render="@form :firstPanel :firstForm :messages" />
                            </h:commandButton>
                            <h:message for="input" />
                        </h:form>
                    </h:panelGroup>
                    <h:messages id="messages" globalOnly="true" layout="table" />



                </p>
            </ui:define>
        </ui:composition>
        This and everything after will be ignored
    </h:body>
</html>

另见:

http://balusc.blogspot.ca/2011/09/communication-in-jsf-20.html#AjaxRenderingOfContentWhichContainsAnotherForm

JSF 2.0 commandButton do nothing

https://javaserverfaces.java.net/nonav/docs/2.0/pdldocs/facelets/h/commandButton.html

http://docs.oracle.com/javaee/7/tutorial/doc/jsf-facelets003.htm

我在Glassfish上使用CDI运行facelets,因此使用@Named @ManagedBean - 上面的一些文档更适合{{1但是我不确定那有多重要。

目标比“你好世界”更好一步,“你好世界,你的猜测是”将是一个好结果。如果有特定的手册,我不介意该特定文档的RTFM。 Oracle文档可能是facelets的最佳文档吗?

代码:

https://github.com/THUFIR/EntAppWeb

1 个答案:

答案 0 :(得分:0)

response.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">

    <h:head>response</h:head>
    <h:body>
        This and everything before will be ignored
        <ui:composition template="template.xhtml">
            <ui:define name="navigation">
                <ui:include src="menu.xhtml"/>
            </ui:define>
            <ui:define name="main">
                <h1>submitted value</h1>
                <p>
                    #{nextClient.guess}
                </p>
                <h2>for this bird</h2>
                <p>
                    #{nextClient.client}
                </p>
            </ui:define>
        </ui:composition>
        This and everything after will be ignored
    </h:body>
</html>

next.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">

    <h:head>next</h:head>
    <h:body>
        This and everything before will be ignored
        <ui:composition template="template.xhtml">
            <ui:define name="navigation">
                <ui:include src="menu.xhtml"/>
            </ui:define>
            <ui:define name="main">
                <h1>next bird</h1>
                <p>
                    #{nextClient.next}
                </p>
                <p>
                    <h:panelGroup id="simpleGroup">
                        <h:form id="simpleForm">
                            <h:outputLabel for="input" value="First form input" />
                            <h:inputText id="input" value="#{nextClient.guess}" required="true" />
                            <h:commandButton value="submit" action="response">
                            </h:commandButton>
                        </h:form>
                    </h:panelGroup>

                </p>
            </ui:define>
        </ui:composition>
        This and everything after will be ignored
    </h:body>
</html>

使用支持bean NextClient

package dur.beans;

import dur.jpa.Client;
import dur.jpa.ClientFacadeLocal;
import java.util.concurrent.atomic.AtomicInteger;
import javax.ejb.EJB;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Named;

@Named("nextClient")
@ApplicationScoped
public class NextClient implements NextClientLocal {

    @EJB
    private ClientFacadeLocal clientFacade;
    private AtomicInteger next = new AtomicInteger(1009);
    private AtomicInteger guess = new AtomicInteger(0);
    private final boolean correct = true;
    private Client client = new Client();

    @Override
    public String getNext() {
        next.addAndGet(1);
        client = clientFacade.find(next.intValue());
        return client.toString();
    }

    @Override
    public void setGuess(int guessInt) {
        guess = new AtomicInteger(guessInt);
    }

    @Override
    public int getGuess() {
        return guess.intValue();
    }

     @Override
    public Client getClient() {
        return client;
    }

    @Override
    public void setClient(Client client) {
        this.client = client;
    }

}

将提交的值与鸟一起输出到响应中。将结果输出到同一页面可能更有意义,但这已足够。