代码之家  ›  专栏  ›  技术社区  ›  schlebe

为什么当readonly=true时,使用Javascript分配给Primefaces inputText小部件的值不会发送到服务器?

  •  2
  • schlebe  · 技术社区  · 6 年前

    我已经创建了特定的代码,允许用户加载一个对话框来指定一些搜索标准。

    调用该对话框的代码是

    <i   class="fa fa-fw fa-dot-circle-o"
         onclick="PF('LoadLabelHomoVectoDialog').show();"
         />
    <p:inputText
         id="CertificationCodeId"
         value="#{vC.postLabellingSearchCriteria.certificationCode}"
         readonly="true"
         />
    

    CertificationCodeId inputText小部件直接使用Javascript填充。我可以看到它的具体价值。

    然后在主页面上(不是对话框中的更多),我单击搜索按钮,使用在中找到的条件值开始新的搜索 证书代码ID 输入文本小部件。

    如果 readonly 属性等于“false”,小部件值正确传输到服务器上的ViewController。

    如果 只读 属性等于“true”,小部件值为 未传播 要查看服务器上的控制器。

    我以为 只读 属性只是禁止用户输入,而不是禁止将值传输到服务器。

    我错了什么?

    我的问题有一个答案 Validate readonly components anyway on form submit 这与提议不符!!!提议的是我提议的链接的副本:-)

    2 回复  |  直到 6 年前
        1
  •  2
  •   Javier    6 年前

    当出于安全目的禁用或只读输入时,JSF和PrimeFaces不处理值。因此,即使黑客启用输入并提交表单,JSF PrimeFaces也会检查组件。所以这是标准行为。您需要在服务器端启用它。

    可在此处找到: https://forum.primefaces.org/viewtopic.php?t=15632

        2
  •  0
  •   schlebe    6 年前

    因为我会看到的 inputText 输入文本 这样地。。。

    <i   class="fa fa-fw fa-dot-circle-o"
         onclick="PF('LoadLabelHomoVectoDialog').show();"
         />
    <p:inputText
         id="CertificationCodeId"
         value="#{vC.postLabellingSearchCriteria.certificationCode}"
         readonly="true"
         />
    <p:inputText
         id="CertificationCodeIdBecauseJSFdontSentReadOnlyWidgetValueToServer"
         value="#{vC.postLabellingSearchCriteria.certificationCode}"
         style="display:none"
         />
    

    第二个小部件的值被发送到服务器,因为它未被禁用或只读。

    在Javascript代码中,我必须分配两个小部件。

    当输入被禁用或禁用时,JSF和PrimeFaces不处理值 仅供安全使用。因此,即使是黑客也会启用输入和

    我唯一看到的是代码更复杂,可读性更低:-)

    既然可以做复杂的事,为什么要做简单的事?