【问题标题】:JSF Open dialog on value changeJSF 打开关于值更改的对话框
【发布时间】:2018-05-29 13:43:23
【问题描述】:

我的 Web 应用程序中有多个视图。在每个视图上,我都需要检查“更改事件”。一旦值被更改(不提交),我想在我的 bean 中设置一个布尔值 true。这可能吗?有很多输入,所以每个组件上的 a 都会很烦人。

我正在使用 Wildyfly 服务器并使用 Primefaces 6.2、JSF 2.2。

谢谢和问候!

【问题讨论】:

  • 尝试使用 将事件中的值更改为 onchange。
  • 在这种情况下,我必须将其添加到所有视图中的每个可编辑组件中 - 这就是我正在寻找解决方法的原因

标签: jsf events primefaces


【解决方案1】:

我觉得可以用jquery+remote命令来实现,例如:

 <script type="text/javascript">
             $(document).ready(function () {
                 $(".ui-input").on('change', function (event) {
                    setBooleanValue()
                 });
             });

         </script>

然后是 remoteCommand,它将触发托管 bean 上负责设置布尔值的方法:

    <h:form>
       <p:remoteCommand name="setBooleanValue" action="#{myBeann.callMethodToSetBoolean}"/>
    </h:form>

remoteCommand 将在每次(primefaces)输入更改时被调用。

此外,如果您在页面上有 ajax 更新,则需要在 ajax 调用后重新注册输入上的 jquery 更改事件:

<script type="text/javascript">
    $(document).ready(function () {
        $(".ui-input").on('change', function (event) {
            setBooleanValue()
        });
    });

    $(document).on("pfAjaxComplete", function () {
        $(".ui-input").on('change', function (event) {
            setBooleanValue()
        });
    });

</script>

【讨论】:

  • 这适用于所有可编辑的 primefaces 组件吗?例如 selectonemenu 或 datatable?
  • 只需调整选择器,例如 $(".ui-input, .ui-selectonemenu")
  • 不幸的是,这个解决方案会导致很多性能问题 =/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
相关资源
最近更新 更多