2017-01-19 2 views
0

のクリックでビューにパラメータを渡す:JSF - 私はJSF 2.0を使用して、以下のような単純なTestButton.xhtml持っていますボタン

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:a4j="http://richfaces.org/a4j" 
    xmlns:rich="http://richfaces.org/rich"> 

<h:body> 
<h:form> 
     <h:inputText value="#{employee.empName}"/><br/> 
     <h:commandButton value="Derive" action="EmployeeTest2" > 
      <f:param name="Name" value="#{employee.empName}"/> 
     </h:commandButton> 
</h:form> 
</h:body> 
</ui:composition> 

とビューがスコープされるマネージドBeanを。

@ManagedBean(name="employee", eager=true) 
@ViewScoped 
public class Employee implements Serializable{ 

String empName; 
String selectedEmployeeName; 


public String getSelectedEmployeeName() { 
    return selectedEmployeeName; 
} 
public void setSelectedEmployeeName(String selectedEmployeeName) { 
    this.selectedEmployeeName = selectedEmployeeName; 
} 

public Employee() { 
    super(); 
} 

public String getEmpName() { 
    return empName; 
} 
public void setEmpName(String empName) { 
    this.empName = empName; 
} 
public void manipulate(){ 
    System.out.println("Manipulate called..."); 
    System.out.println(selectedEmployeeName); 
    this.selectedEmployeeName = this.selectedEmployeeName + " Jr."; 
} 

は今、ボタンのクリック時に、私はコードを以下ましたEmployeeTest2.xhtmlに移動します。

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:a4j="http://richfaces.org/a4j" 
    xmlns:rich="http://richfaces.org/rich"> 

<f:view> 
    <f:metadata> 
     <f:viewParam name="Name" value="#{employee.selectedEmployeeName}"/> 
     <f:event type="preRenderView" listener="#{employee.manipulate}"/> 
    </f:metadata> 
</f:view> 

<h:body> 
     <h:inputText value="#{employee.selectedEmployeeName}"/> 
</h:body> 
</ui:composition> 

私が正しくEmployeeTest2.xhtmlにナビゲートしますが、私のパラメータの値がnullとして来ています。操作メソッドが呼び出されていることがわかります(sysoutsは印刷されます)が、selectedEmployeeNameはnullです。

私は何が不足しているかについて助言してください。

私は既にスレッドの下で言及していましたが、同じですが助けがありませんでした。

https://stackoverflow.com/questions/20880027/passing-parameters-to-a-view-scoped bean-in-jsf

アップデート1: <h:inputText value="#{employee.empName}"/>

<h:inputText value="Chris"/> 

を変更selectedEmployeeためのsetterメソッドにブレークポイントを置きます。セッターは呼び出されていません。これは、パラメーター渡しが機能していないことを意味します。

アップデート2 employee.empNameの値が実際にnullであるので、あなたが次のページにnullを送っている私の意見ではtestButton.xhtml

コードが正しいようだ
?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"  
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<ui:composition xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:ui="http://java.sun.com/jsf/facelets" 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:a4j="http://richfaces.org/a4j" 
    xmlns:rich="http://richfaces.org/rich"> 

<h:body> 
<h:form> 
     <h:inputText name = "Name" value="#{employee.empName}"/><br/> 
     <h:commandButton value="Submit" action="EmployeeTest2" > 
      <f:param name="Name" value="#{employee.empName}"/> 
     </h:commandButton> 
</h:form> 
</h:body> 
</ui:composition> 

答えて

0

、更新を参照してください。

TestButton.xhtmlが読み込まれたときにgetEmpName()メソッドをデバッグし、ボタンをクリックして次のページに移動して、パラメータがURLに存在するかどうかを確認します。

UPDATE

玉PARAMは、実際の入力値です。その場合、その定義に名前を追加します。

<h:inputText name="Name" value="#{employee.empName}"/><br/> 
<h:commandButton value="Derive" action="EmployeeTest2" /> 

UPDATE 2

は、これが回避策ですが、あなたもこの試すことができます:あなたはこのようになっているはず形成

@PostConstruct 
     public void postConstruct(){ 

     Map<String,String> params = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap(); 
     setSelectedEmployeeName(params.get("Name")); 
} 
+0

を更新1 – MMSharma

+0

を参照してください私の更新のポストを確認してください –

+0

@ Maciej Kowalski:助けも同じではありませんでした。まだnullとして表示されます。アップデート2を参照してください – MMSharma

関連する問題