2

私は JSF 1.1 プロジェクトに取り組んでいます。

JSP:

<h:column>
        <f:facet name="header"> <h:outputText value="Edit" />     </f:facet>

        <h:commandLink rendered="#{(Table1_var.status == 'CONFIRMED') or (Table1_var.status == 'CHECKED_IN')}"
            action="#{Table1_var.onEditReservation}">
            <h:graphicImage id="view-details-link" alt="Drill Down on the Dynamic Link!"
                    url="images/editReservationSmall.png" styleClass="view-details-img"/>
           <f:param
                name="VastuId"
                value="#{Table1_var.id}" />                 
        </h:commandLink>

        <f:facet name="footer"><h:outputText value="Edit" /> </f:facet>                
    </h:column>

では<f:param>VastuIdパラメータに が割り当てられていidます。var=Table1_varクラスでどこにマッピングされているのかわからないためです。しかし、その値をどこから取得できるかを手動で検索して、クラス/メソッドを取得しました。

public void navReservationDetail(final ActionEvent e) {
    Calendar cal1 = Calendar.getInstance();
    String rowId = FacesHelper.getRequestParameter("VastuId");
    System.out.println("ID :"+rowId);
}

FacesHelper.getRequestParameter

public static String getRequestParameter(String parameter) {
    return (String) FacesContext.getCurrentInstance().getExternalContext()
            .getRequestParameterMap().get(parameter);
}

UIを使わずにJavaで手動でそのパラメータを設定したいと思います。私はこれを使ってみました:

FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().put("#{VastuId}", reservationBean.getParentReservationProperty());              
String rowId = FacesHelper.getRequestParameter("VastuId");
System.out.println("selectedVastuId = "+rowId);

で例外をスローしていますgetRequestParameterMap().put()

java.lang.UnsupportedOperationException: Cannot set ServletRequest Parameter
at org.apache.myfaces.context.servlet.RequestParameterMap.setAttribute
(RequestParameterMap.java:44)
at org.apache.myfaces.context.servlet.AbstractAttributeMap.put(AbstractAttributeMap.java:104)

これはどのように発生し、どうすれば解決できますか?

4

1 に答える 1

3

パラメータマップは読み取り専用です。サーブレット環境では、このデータ構造はURLのクエリ部分の値を表します(例http://foo/bar?queryValue=queryKey)。サーバーは、ブラウザにリダイレクト呼び出しを発行することによってのみ、これらの値を変更できます。

基本JSF1.1/ 1.2実装で使用可能なユーザーごとの読み取り/書き込みスコープは、要求セッションです。

データをスコープに配置するときは、EL式ではなくリテラル名を使用する必要があります。

FacesContext.getCurrentInstance()
            .getExternalContext()
            .getRequestMap()
            .put("VastuId", reservationBean.getParentReservationProperty()); 

この値は、式#{VastuId}またはを使用してビューで解決でき#{requestScope.VastuId}ます。

于 2012-12-27T09:40:43.800 に答える