2

ajax 呼び出しを行うたびに、URL パラメータの有効期限が切れます。私が行った回避策は、次のようにすべてのボタン内にパラメーター リクエストを渡すことです。

<p:commandLink value="Submit" actionListener="#{mybean.dosomething}">
   <f:param name="foo" value="#{mybean.bar}"/>
</p:commandLink>

ただし、シナリオによっては、上記の回避策を実行できません。たとえば、primefaces rowEditEvent を使用している場合:

<p:ajax event="rowEditCancel" listener="#{mybean.onCancel}"/>

このajax呼び出しを行うと#{mybean.onCance}パラメーターが期限切れになり、URLのパラメーターからデータテーブルのデータを読み取っているため、呼び出す前にエラーが発生します。

では、このような ajax 呼び出しを行うときに、どうすれば param 値を維持できますか?

PS: mybean は ViewScoped です

問題の拡張:

問題の<o:form>一部は解決されましたが、テーブル内で動的な画像をストリーミングするために、フォーム内でパラメータを送信できません。以下を参照してください。

<p:dataTable value="#{mybean.data}" var="var">
    <p:column headerText="Thumbnail">
        <p:graphicImage value="#{streamer.thumbnail}">
            <f:param name="id" value="#{var.id}"/>
        </p:graphicImage>
    </p:column>
</p:dataTable>

ストリーマー Bean (RequestScoped):

 public StreamedContent getThumbnail() throws IOException {
      FacesContext context = FacesContext.getCurrentInstance();
      if (context.getRenderResponse()) {
          return new DefaultStreamedContent();
      }
      else {
         String string = context.getExternalContext().getRequestParameterMap().get("id");
        Long id = Long.parseLong(idString);
        MyImage img = (MyImage) service.find(MyImage.class, id);//get resource
        StreamedContent sc = new DefaultStreamedContent(img.getInputStream(), "image/jpg", img.getName());
        return sc;
        }
 }

ここstringは常に null で、パラメーターが渡されないため、エラーが発生します

4

1 に答える 1

4

として登録します。<f:viewParam>

<f:viewParam name="foo" value="#{mybean.bar}" />

の代わりに<h:form>OmniFaces <o:form>を使用します (これは、すべてのビュー パラメーターを自動的に収集し、フォーム アクション URL として使用されるメソッドの結果にそれらを追加includeViewParams="true"するカスタム実装を内部で使用します):ViewHandlergetActionURL()

<o:form includeViewParams="true">
    ...
</o:form>

<f:param>このようにして、すべてのビュー パラメーターがフォームのアクション URL に含まれるため、通常の方法で要求パラメーターとして終了し<p:ajax>ます<f:ajax>

于 2013-02-06T18:24:06.767 に答える