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

为什么当readonly=true时,使用Javascript分配给Primefaces inputText小部件的值不会发送到服务器?,javascript,primefaces,readonly,Javascript,Primefaces,Readonly,我已经创建了特定的代码,允许用户加载一个对话框来指定一些搜索标准 调用该对话框的代码是 <i class="fa fa-fw fa-dot-circle-o" onclick="PF('LoadLabelHomoVectoDialog').show();" /> <p:inputText id="CertificationCodeId" value="#{vC.postLabellingSearchCriteria.certifica

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

调用该对话框的代码是

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

用户单击图标并显示对话框。 用户在对话框中执行一些操作,单击OK按钮,然后使用Javascript直接填充
CertificationCodeId
inputText小部件。我可以看到它的具体价值

然后在主页上(对话框中没有更多),我单击搜索按钮,使用
CertificationCodeId
inputText小部件中的条件值开始新的搜索

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

如果
readonly
属性等于“true”,则小部件值不会传输到服务器上的ViewController

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

我错了什么

这是一个问题吗


我的问题有一个答案,那就是与提议的不一致!!!提议的是我提议的链接的副本:-)

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


在这里可以找到:

因为我知道可见的
inputText
是只读的,所以唯一的解决办法是像这样复制只读的
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不处理值 仅供安全使用。因此,即使是黑客也会启用输入和 提交表单,JSF PrimeFaces检查组件

我认为现在,JSF/Primefaces想要避免的问题总是存在的,因为黑客可以更改隐藏小部件的内容

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


当可以进行复杂操作时,为什么要进行简单操作?

传输或处理的数据可能重复?主要区别。它是被传输的,只是没有被处理。下面的链接给出了更好的解释@kukeltje-我已经阅读了通信的重复链接。但是你读过我交流过的重复链接吗?你的重复链接,如果从2015年和我的重复链接是从2014年!事实上,你的重复链接是2014年发布的问题的重复!但也许我误解了你说“不”的意思!但无论如何,我在2014年和2015年的帖子中找到的问题答案都是正确的。就我个人而言,我发现BalsuC在2014年发布的帖子中的回答更具文档化。