【发布时间】:2014-10-27 11:11:27
【问题描述】:
我正在使用 Primefaces 5.0.2 和 Glassfish 4 (Mojarra 2.2.0)。
我一直在尝试添加一个命令按钮来删除/移除 p:galleria 组件中的选定图像。我尝试在 Galleria 组件中添加一个按钮,如下所示:
<p:galleria id="images" value="#{someBean.images}" var="image">
<p:graphicImage value="#{image}"/>
<p:commandButton icon="ui-icon-trash" title="Delete #{image}" style="position:absolute; top:0; right:0; z-index:10;"
actionListener="#{someBean.deleteImage(image)}"
update="growl images" />
</p:galleria>
我可以在按钮内很好地显示图像路径,但在 EL 表达式#{someBean.deleteImage(image)} 中传递图像参数无法按预期工作。
我遇到的问题是,当调用 deleteImage 时,图像参数 (String) 始终为空,而不是包含图像名称。但是,title="Delete #{image}" 显示正常,所以我怀疑 image 在 actionListener 或 action 属性中没有正确解析。
如果我在 xhtml 中输入文字字符串,例如#{someBean.deleteImage('deleteme')} 正确传递。传递null 也会给出一个空字符串。
someBean.images 是 List<String>(图像路径)。
我不知所措:/谁能指出我正确的方向?这是一个错误还是我做错了什么?
我也考虑过在 Galleria 组件之外添加一个按钮,但我不清楚如何在不修改 p:galleria 组件的情况下确定所选图像。 还有一个关于这个(1岁)How to get the selected image from <p:galleria
的未回答问题更新:
使用ui:param 或c:set 将"test" 附加到image 实际上会给我deleteImage 方法中的字符串"test",但是h:outputText 组件正确地呈现image 和"test" 的值附加。这向我表明它们是在不同的时间呈现的 - 而 commandButton 是在 image 为空的时候呈现的?
<p:galleria id="images" value="#{someBean.images}" var="image">
<p:graphicImage value="#{image}"/>
<ui:param name="img" value="#{image}test"/>
<h:outputText value="#{img}"/>
<p:commandButton icon="ui-icon-trash" title="Delete #{image}" style="position:absolute; top:0; right:0; z-index:10;"
actionListener="#{someBean.deleteImage(img)}"/>
</p:galleria>
更新 2
这可能与 Primefaces Extensions 中的一个类似问题有关——毕竟这可能是一个错误。 http://forum.primefaces.org/viewtopic.php?f=14&t=39992
我也在PF论坛发了一个帖子:http://forum.primefaces.org/viewtopic.php?f=3&t=40055
【问题讨论】:
-
你能试试这个肮脏的小技巧吗:
actionListener="#{someBean.deleteImage(image.concat(''))}"? -
遗憾的是这并没有改变任何东西。甚至
image.concat('test')也给了我一个空字符串。我在原始帖子中忘记提到的是正确传递了一个文字字符串。 -
正如您可能想的那样,我的想法是在价值可用时抓住它。您能再尝试一件事吗:
<c:set var="img" value="#{image}/>"在<p:commandButton>之前,#{someBean.deleteImage(img)}在行动侦听器中?不过,当第一个建议失败时,我不希望这会起作用。 -
也不起作用 - 有趣的是
#{someBean.deleteImage(null)}也给了我一个空字符串,所以image可能在生成动作侦听器的 JS 时解析为null,并且 PF 替换带有空字符串的 null。 -
我刚刚做了一个有趣的观察:
<c:set var="img" value="#{image}test"/>和actionListener="#{imageHelper.deleteImage(img)}"将在方法中给我字符串"test"。但是<h:outputText value="#{img}"/>正确地渲染了附加了测试的图像路径。我现在彻底糊涂了……
标签: jsf primefaces