0

URLに問題があります。まず、画像と画像の情報を表示する必要がありますが、ボタンをクリックして情報を表示する必要があります。

画像が表示され、情報が表示されていないリンクです。portal / faces / chicken.jsp?image_id = 1

だから、ボタンをクリックした後。portal / faces/chicken.jspになります

画像を表示するためにrequest.getParameter( "image_id")を使用しているため、画像を取得するためのコードにはurl image_id=1が必要です。

これはjsfからの私のボタンのコードです:

<h:commandButton action="#{bean1.checkwork}" value="Get Info" type="submit">
    <f:param name="id" value="#{param['image_id']}"></f:param>
</h:commandButton>

これは私のfaces-config.xmlのコードです:

<navigation-rule>
    <from-view-id>/MainPage.jsp</from-view-id>
    <navigation-case>
        <from-action>#{bean1.checkwork}</from-action>
        <from-outcome>successful</from-outcome>
        <to-view-id>chicken.jsp?image_id=#{param['image_id']}</to-view-id>
    </navigation-case>
</navigation-rule>

これは私の関数のコードです。

      public String checkwork()
      { 
           HttpServletRequest request = (HttpServletRequest)
           FacesContext.getCurrentInstance().getExternalContext().getRequest();
           String image_ID = null;
              if(request!=null)
              {
                   image_ID = request.getParameter("image_id");

                   images(image_ID);
                  student(matric);

               }
          else
          {
               System.out.println("fail");
                }

    return "successful";

}

それで、それはjsf、マネージドBean、またはfaces-config.xmlと関係がありますか?誰かが私のコードの問題を知っていますか?

4

1 に答える 1

1

コマンドボタンはリクエストURLの代わりにリクエスト本文のパラメータを使用してPOSTリクエストを送信するため、ボタンを押してもURLには表示されなくなります。したがって、リクエストパラメータは確実に利用できます。HTTPトラフィックチェッカー(Chrome / IE9 / FirebugでF12を押す)を使用すると、それを確認できます。

<f:param>間違った名前を割り当てたために、具体的な問題が発生します。

<f:param name="id" value="#{param['image_id']}"></f:param>

このようにすると、あなたが試みたようにrequest.getParameter("id")ではなく、によってのみ利用可能になります。getParameter("image_id")それに応じて名前を修正します。

<f:param name="image_id" value="#{param['image_id']}" />

「関数」(「関数」は間違った用語です。おそらく「メソッド」、「アクションメソッド」を意味します)の後にURLを維持することについての具体的な質問については、POSTの代わりにGETを使用してください。<h:button>の代わりに使用してください<h:commandButton>。コードを変更するだけで、(post)コンストラクターまたは<f:event preRenderView>ターゲットビューに関連付けられたBeanの実際のアクションを呼び出すことができます。


具体的な問題とは関係なく、バッキングBeanでそれを取得するためのより良い方法があります。

String imageId = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("image_id");

javax.servlet.*JSFコードにインポートがあるということは、つまり、不器用な方法で何かをしていることを示しています。request決してnullではないことに注意してください(他にどのようにJSFコードが実行されるのでしょうか)。そのため、nullcheckonrequestも完全に不要です。

別の方法は使用してい@ManagedPropertyます:

@ManagedProperty("#{param.image_id}")
private String imageId; // +setter

ただし、これはリクエストスコープのBeanでのみ機能します。

于 2012-09-06T11:11:40.203 に答える