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 で、パラメーターが渡されないため、エラーが発生します