Перейдите с параметром Get, не получая все параметры - PullRequest
1 голос
/ 20 марта 2012

Я передаю три поля, но передается только первое, хотя встроенный URL-адрес показывает правильные значения:

TestBean1:

@ManagedBean
@RequestScoped
public class TestBean1 implements Serializable  {


private String field1;
private String field2;
private String field3;

// Constructor
public TestBean1() {

}

public void handleRequest() throws IOException {

    setField1("1 Julie");
    setField2("2 Kyle");
    setField3("3 Bob");

    String field1 = URLEncoder.encode(this.field1, "UTF-8");
    String field2 = URLEncoder.encode(this.field2, "UTF-8");
    String field3 = URLEncoder.encode(this.field3, "UTF-8");     

    String url = "Bean2.jsf?field1=" + field1 + "&field2=" + field2
                + "&field3=" + field3;

      FacesContext.getCurrentInstance().getExternalContext().redirect(url); 

}

// Getter and Setters
public String getField1() {
    return field1;
}

public void setField1(String field1) {
    this.field1 = field1;
}
public String getField2() {
    return field2;
}

public void setField2(String field2) {
    this.field2 = field2;
}

public String getField3() {
    return field3;
}

public void setField3(String field3) {
    this.field3 = field3;
}

  }

Bean1.jsf

  <ui:composition 

 xmlns="http://www.w3.org/1999/xhtml"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:p="http://primefaces.org/ui"
 template="/templates/template.xhtml">


<ui:define name="title">
    Bean 1
</ui:define>

  <ui:define name="content">

  <h:body>

<h:form>
  <table>
    <tr>        <td>Bean 1 </td>            </tr>
    <tr>        <td> </td>              </tr>
    <tr>        <td> </td>          </tr>
    <tr>        <td><h:commandLink value="Submit" action="#
                                    {testBean1.handleRequest}" /> </td>     </tr>
</table>

</h:form>   
  </h:body>
  </ui:define>  
  </ui:composition> 

Bean2.jsf

  <ui:composition 

 xmlns="http://www.w3.org/1999/xhtml"
 xmlns:f="http://java.sun.com/jsf/core"
 xmlns:ui="http://java.sun.com/jsf/facelets"
 xmlns:h="http://java.sun.com/jsf/html"
 xmlns:p="http://primefaces.org/ui"
 template="/templates/template.xhtml">

 <f:metadata>
 <f:viewParam name="field1" value="#{testBean2.field1}"/>
 <f:viewParam name="field2" value="#{testBean2.field2}"/>
 <f:viewParam name="field3" value="#{testBean2.field3}"/>
 </f:metadata>

<ui:define name="title">
    Bean 2
</ui:define>

 <ui:define name="content">

 <h:body>

<h:form>

<table>
    <tr>    <td>Bean 2 </td> </tr>
    <tr>    <td><h:inputText id="Input" value="#{testBean2.myInput}"/>  </td> /tr>      <tr>    <td> </td>  </tr>
    <tr>    <td> <h:outputText value="#{testBean2.field1}"    />  </td>     </tr>
    <tr>    <td> <h:outputText value="#{testBean2.field2}" />    </td>      </tr>
    <tr>    <td> <h:outputText value="#{testBean2.field3}" />    </td>      </tr>
    <tr>    <td> <h:commandLink value="Click" 
                       action="#{testBean2.handleRequest}" /> </td> </tr>

     </table>

</h:form>   
   </h:body>
   </ui:define> 
   </ui:composition>

TestBean2

     @ManagedBean
     @ViewScoped
     public class TestBean2  implements Serializable  {

private static final long serialVersionUID = -9L;

private String field1;
private String field2;
private String field3;

private String myInput = "Hello";


// Constructor
public TestBean2 () {
}

public void handleRequest() {

    System.out.println("field1 " + field1  + "  field2 " + field2 + "  field3 " + 
                    field3);

}


// Getter and Setters

    public String getField1() {
        return field1;
    }

    public void setField1(String field1) {
        this.field1 = field1;
    }
    public String getField2() {
        return field2;
    }

    public void setField2(String field2) {
        this.field2 = field2;
    }

    public String getField3() {
        return field3;
    }

    public void setField3(String field3) {
        this.field3 = field3;
    }

public String getMyInput() {
    return myInput;
}

public void setMyInput(String myInput) {
    this.myInput = myInput;
}

   }

Когда я запускаю это, я получаю только значение для field1.

Спасибо

1 Ответ

1 голос
/ 20 марта 2012

В шаблонных клиентах <f:metadata> должен входить внутрь <ui:define>, в противном случае поведение не определено.См. Также документацию по тегу <f:metadata> для примера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...