每当我进行 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 调用时,如何维护参数值呢?
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>
Streamer 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
始终为空且未传递参数导致错误