提交前更新表单输入

时间:2018-03-26 13:29:25

标签: javascript java jsf primefaces

我正在开发JSF Web应用程序并且有一些HOW-TO问题。 我有以下用例场景:

  1. 用户输入文字,使用h:inputText
  2. 然后点击提交
  3. 来自h的值:inputText在客户端加密(使用JavaScript)
  4. 表单以加密值提交
  5. h:inputText值恢复为之前的值(由用户键入,未加密)。
  6. 我想以通用方式发送加密值。对用户来说应该是透明的。我想有一个机制来使用html属性标记“加密就绪”字段,例如。加密= “真”。

    数据必须在客户端加密,因为服务器无法以RAW格式查看。

    提前致谢。

1 个答案:

答案 0 :(得分:1)

以下是一个如何使用jQuery的示例:

<h:head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</h:head>
<h:body>
    <script>
        $(function() {

            $("form").submit(function() {
                $("input[data-encrypt='true']").each(function() {
                    $(this).val(encrypt($(this).val()));
                });
            });

            $("input[data-encrypt='true']").each(function() {
                if ($(this).val()) {
                    $(this).val(decrypt($(this).val()));
                }
            });
        });

        function decrypt(str) {
            // to be implemented
            return "decrypted value";
        }

        function encrypt(str) {
            // to be implemented
            return "encrypted value";
        }
    </script>


    <h:form id="form">
        <h:inputText value="#{viewBean.value}" id="val" pt:data-encrypt="true" />
        <h:commandButton value="Process" />
    </h:form>
</h:body>

您可以在自己的.js文件中提取javascript部分,并将其包含在您需要的任何页面中。 不要忘记定义pt命名空间:

xmlns:pt="http://xmlns.jcp.org/jsf/passthrough"

此解决方案不适用于f:ajax。