2012-04-01 2 views
0

Итак, у меня есть бэк-бэк, Foo и шаблон с клиентом, запрос и ответ. клиенты избыточны, я хочу всего одного клиента.hello world facelets 2.0 навигация

Клиенты:

[email protected]:~$ 
[email protected]:~$ cat NetBeansProjects/NNTPjsf/web/foo/request.xhtml 
<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" 
       template="./template.xhtml" 
       xmlns:h="http://java.sun.com/jsf/html"> 

    <ui:define name="left"> 

     <h:form> 
      <h:inputText size="2" maxlength="50" value="#{foo.bar}" /> 
      <h:commandButton id="submit" value="submit" action="response" /> 
     </h:form> 
    </ui:define> 

    <ui:define name="content"> 
     <h:outputText value="#{foo.bar}"></h:outputText> 
    </ui:define> 

</ui:composition> 
[email protected]:~$ 
[email protected]:~$ cat NetBeansProjects/NNTPjsf/web/foo/response.xhtml 
<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE composition PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<ui:composition xmlns:ui="http://java.sun.com/jsf/facelets" 
       template="./template.xhtml" 
       xmlns:h="http://java.sun.com/jsf/html"> 

    <ui:define name="left"> 

     <h:form> 
      <h:inputText size="2" maxlength="50" value="#{foo.bar}" /> 
      <h:commandButton id="submit" value="submit" action="response" /> 
     </h:form> 
    </ui:define> 

    <ui:define name="content"> 
     <h:outputText value="#{foo.bar}"></h:outputText> 
    </ui:define> 

</ui:composition> 
[email protected]:~$ 

который я думаю, что это нормально, и само по себе.

Резервное боб:

package guessNumber; 

import java.io.Serializable; 
import javax.enterprise.context.SessionScoped; 
import javax.faces.context.FacesContext; 
import javax.inject.Named; 
import javax.servlet.http.HttpSession; 

@Named 
@SessionScoped 
public class Foo implements Serializable { 

    private String bar = "bar"; 
    private String response = "response"; 

    public Foo() { 
    } 

    /** 
    * @return the bar 
    */ 
    public String getBar() { 
     return bar; 
    } 

    /** 
    * @param bar the bar to set 
    */ 
    public void setBar(String bar) { 
     this.bar = bar; 
    } 

    /** 
    * @return the response 
    */ 
    public String getResponse() { 
     FacesContext context = FacesContext.getCurrentInstance(); 
     HttpSession session = (HttpSession) context.getExternalContext().getSession(false); 
     session.invalidate(); 
     response = "hmm"; 
     return response; 
    } 

    /** 
    * @param response the response to set 
    */ 
    public void setResponse(String response) { 
     this.response = response; 
    } 
} 

То, что я хотел бы только один клиент, request_response или что-то. Чтобы форма ввода текста оставалась слева, а результат - справа. Это сделано с тегами композиции? Или третий «общий клиент», который имеет два суб-клиента?

ответ

2

Вы должны изменить CommandButton на странице запроса для вызова метода действия в вспомогательном компоненте:

<h:commandButton id="submit" value="submit" action="#{foo.doAction}" /> 

В методе действий набор ответ:

public String doAction() { 
    response = "hmm"; 
    return "response"; 
} 

Возвращаемое значение метод действия переходит на страницу /response.xhtml.

Но вам не нужны две страницы. Вы можете вернуть null от метода действия, чтобы обновить текущую (запрос) страницы:

public String doAction() { 
    response = "hmm"; 
    return null; 
} 

Затем измененные значения для бара и ответа могут быть показаны на правой стороне:

<ui:define name="content"> 
    <h:outputText value="#{foo.bar}"></h:outputText> 
    <h:outputText value="#{foo.response}"></h:outputText> 
</ui:define> 
+0

всего две подсказки: если вы хотите остаться на одной странице, вы можете просто определить свой метод действий как 'void doAction() {}'. Кроме того, в этом случае '' может не понадобиться; вы можете поместить EL непосредственно на Facelet. Надеюсь, это поможет;) –

+0

Ответ и благодарность отлично смотрятся, я попробую, может быть, через несколько часов и вернусь сюда. благодаря! – Thufir

+0

Спасибо, вы оба. – Thufir