javascript - java backing bean加载图片后自动调用JS函数
问题描述
java backing bean返回图像后,我需要JS
自动调用我的调整大小函数。这是xhtml
负责图像加载的部分。它是dataGrid
.
<p:panel id="panel1" >
<p:graphicImage id="image1" value="#{imageService.image}" width="100%" height="100%">
<f:param name="id" value="#{kprod.id}" />
</p:graphicImage>
</p:panel>
这是bean 方法:
public StreamedContent getImage() throws IOException {
FacesContext context = FacesContext.getCurrentInstance();
if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) {
return new DefaultStreamedContent();
}
else {
String id = context.getExternalContext().getRequestParameterMap().get("id");
return findImage(Long.valueOf(id));
}
}
完成渲染阶段后,它会转到返回实际图像的 else 分支。
我有工作JS
功能resizeImage()
。我通过添加属性onclick="resizeImage()"
来测试它<p:graphicImage>
,然后单击图像并正确调整大小。我现在需要的是自动调用这个函数。
<p:graphicImage>
没有任何我可以使用的属性。我也尝试过<p:ajax oncomplete="resizeImage()" />
参与<p:graphicImage>
节点,但每次使用时都会返回ajax
此错误:
无法确定事件属性:null
我还有一个子问题。final 中的实际图像 IDHTML
是contentForm:kprods:7:image1
数字根据顺序可变的位置。有没有办法如何将JS
元素的 id 作为参数传递?
非常感谢。
解决方案
好吧,我找到了解决方案。基本上我只需要在加载事件上运行我的函数。但是 primefaces 元素<p:graphicImage>
没有onload属性。
所以我在我的 xhtml 新命名空间中添加了传递属性:
xmlns:x="http://xmlns.jcp.org/jsf/passthrough"
.
x:onload
并为graphicImage元素添加了属性:
<p:panel id="panel1" >
<p:graphicImage id="image1" value="#{imageService.image}" x:onload="resizeImage(this.id)" width="100%" height="100%">
<f:param name="id" value="#{kprod.id}" />
</p:graphicImage>
</p:panel>
然后我检查了最终的 HTML,并且我的函数添加到<img>
元素中有 onload 属性。
推荐阅读
- javascript - 如果节点模块在那里,vue-cli-service 怎么会因为“@vue/cli-plugin-babel”模块而崩溃?
- powershell - 如何从另一个 powershell 脚本逐字编写/创建 powershell 脚本?
- c# - OpenXML - 从 Datagridview 导出时更改 Excel 单元格格式(日期和数字)
- mysql - 为什么在显示我的数据时会尝试获取非对象的属性?
- reactjs - 在异步数据加载中使用 redux 的正确方法
- python - 如何根据Python中的特定条件将json的特定部分存储在变量中?
- javascript - 使用本机反应将数据添加到现有 JSON 文件
- scala - Intellij 社区版坚持使用 Scala 和 SBT
- python - 如何删除文件夹中的所有全黑图像?
- android - TelecomManager.ACTION_CHANGE_DEFAULT_DIALER 在华为 P8 Lite 上返回 RESULT_CANCELED