場合によっては、新しい隠し値をバッキングBeanに渡す必要があるかもしれません。一般に、2つの方法があります。

1. HTMLタグgetRequestParameterMap()

JSF …​

<h:form id="myForm">
    <input type="hidden" name="hidden1" value="this is hidden2"/>
    <h:commandButton value="submit" action="#{user.action}"/>
</h:form>

マネージドBean …​

@ManagedBean(name="user")
@SessionScoped
public class UserBean
{
    public String action(){
       String value = FacesContext.getCurrentInstance().
        getExternalContext().getRequestParameterMap().get("hidden1");
    }
}

2. JSFタグJavaScript

“h:inputHidden”タグで隠しフィールドをレンダリングし、JavaScriptで新しい値を割り当てます。

JSF …​

<script type="text/javascript">
   function setHiddenValue(new__value){

    document.getElementById('myForm:hidden2').value = new__value;

   }
</script>
<h:form id="myForm">
   <h:inputHidden id="hidden2" value="#{user.hidden2}"/>
   <h:commandButton value="submit" action="..." onclick="setHiddenValue('this is hidden2');"/>
</h:form>

マネージドBean …​

@ManagedBean(name="user")
@SessionScoped
public class UserBean
{
    public String hidden2;

    public void setHidden2(String hidden2) {
        this.hidden2 = hidden2;
    }
}

JSF 2.0の新しい隠し値の例

バッキングBeanに新しい隠し値を渡すための上記2つのメソッドの使用方法を示すJSF 2.0の例。

1.マネージドBean

単純なマネージドBeanでは、名前を「user」として割り当てます。

package com.mkyong.form;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import java.io.Serializable;

@ManagedBean(name="user")
@SessionScoped
public class UserBean implements Serializable {

    public String hidden1;
    public String hidden2;

    public String getHidden2() {
        return hidden2;
    }

    public void setHidden2(String hidden2) {
        this.hidden2 = hidden2;
    }

    public String getHidden1() {
        return hidden1;
    }

    public void setHidden1(String hidden1) {
        this.hidden1 = hidden1;
    }

    public String action(){

        String value = FacesContext.getCurrentInstance().
        getExternalContext().getRequestParameterMap().get("hidden1");
        setHidden1(value);

        return "start";
    }
}

2.ページを見る

デモンストレーションのための2ページ。

  • demo.xhtml ** – 新しい隠し値を渡す2つの方法。

<?xml version="1.0" encoding="UTF-8"?>
<!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:h="http://java.sun.com/jsf/html">

    <h:head>
    <script type="text/javascript">
       function setHiddenValue(new__value){

         document.getElementById('myForm:hidden2').value = new__value;

       }
    </script>
    </h:head>
    <h:body>
     <h1>JSF 2 pass new hidden value to backing bean</h1>

     <h:form id="myForm">

       <input type="hidden" name="hidden1" value="this is hidden2"/>

       <h:inputHidden id="hidden2" value="#{user.hidden2}"/>

       <h:commandButton value="submit" action="#{user.action}"
                               onclick="setHiddenValue('this is hidden2');"/>
     </h:form>

    </h:body>
</html>

  • start.xhtml ** – “h:outputText”タグで隠し値を表示します。

<?xml version="1.0" encoding="UTF-8"?>
<!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:h="http://java.sun.com/jsf/html">

    <h:body>
        <h1>JSF 2 pass new hidden value to backing bean</h1>
    <ol>
      <li>Hidden1 = <h:outputText value="#{user.hidden1}"/></li>
      <li>Hidden2 = <h:outputText value="#{user.hidden2}"/></li>
    </ol>
    </h:body>
</html>

デモ


URL:http://localhost:8080/JavaServerFaces/


jsf2-new-hidden-example-1、title = "jsf2-new-hidden-example-1"、幅= 640、高さ= 323


jsf2-new-hidden-example-2、title = "jsf2-new-hidden-example-2"、幅= 640、高さ= 323

ソースコードをダウンロードする

ダウンロード – リンク://wp-content/uploads/2010/09/JSF-2-New-HiddenValue-Example.zip[JSF-2-New-HiddenValue-Example.zip](10KB)