关于 jsf:Primefaces 条件工具提示

Primefaces conditional tooltip

1
2
3
4
5
6
7
8
9
<p:spinner id="amount"
           min="0"
           max="#{bean.availableAmount}"
           value="#{bean.amount}" />
<p:tooltip for="amount"
           showEvent="focus"
           hideEvent="blur"
           disabled="#{bean.amount lt bean.maxAmount}"
           value="Maximum amount has been reached" />

我正在寻找一种方法来实现上面示例中的 disabled 属性之类的东西。换句话说,我想实现一个仅在满足条件时才显示的条件工具提示。有谁知道实现这个的方法吗?


您也可以在客户端使用工具提示的小部件来实现这一点:

1
2
3
4
5
6
7
8
9
10
<p:spinner id="amount" min="0" max="#{bean.availableAmount}" value="#{bean.amount}">  
  <p:ajax oncomplete="myTooltip.hide()" process="@this" />  
</p:spinner>

<p:tooltip id="tooltip"
       for="amount"
       showEvent="focus"
       hideEvent="blur"
       widgetVar="myTooltip"
       value="Maximum amount has been reached" />


为什么不使用 rendered 而不是 disabled?在这种情况下,您需要在 p:spinner 更改其值时更新 p:tooltip 元素。使用 Primefaces 展示中的 ajax 微调器:

1
2
3
4
5
6
7
8
9
10
<p:spinner id="amount" min="0" max="#{bean.availableAmount}" value="#{bean.amount}">  
  <p:ajax update="tooltip" process="@this" />  
</p:spinner>

<p:tooltip id="tooltip"
           for="amount"
           showEvent="focus"
           hideEvent="blur"
           rendered="#{bean.amount lt bean.maxAmount}"
           value="Maximum amount has been reached" />

更新(阅读您的评论后):

如果你想隐藏工具提示,你可以在响应返回浏览器时从服务器端发出命令来执行javascript代码:

1
2
RequestContext context = RequestContext.getCurrentInstance();
context.execute("hideTooltip();");

然后在您的 javscript 代码中调用 hideTooltip

1
2
3
function hideTooltip() {
  $("tooltip").hide();
}