0

getResponse和的返回类型应该是什么submit,并且两者都是必需的?

firstForm或中输入猜测时SecondForm,如何将该猜测回显到同一网页?

要么使用 ajax,所以不重新加载同一页面

或者

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

支持豆,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 什么都不做

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

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

我正在使用 CDI 在 Glassfish 上运行 facelets,所以我正在使用@Named不是 @ManagedBean- 上面的一些文档更适合 . @ManagedBean,但我不确定这有多重要。

目标是比“hello world”好一步,“hello world,你的猜测是”会是一个很好的结果。如果有特定的手册,我不介意针对该特定文档的 RTFM。Oracle 文档可能是 facelets 的最佳选择?

代码:

https://github.com/THUFIR/EntAppWeb

4

1 回答 1

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;
    }

}

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

于 2014-11-02T07:43:41.887 回答