jsf在requestcoped bean中获取禁用的字段值

时间:2014-12-20 19:44:39

标签: jsf scope request field readonly

请您介绍一下如何将xhtml页面中禁用或只读输入字段的值传递给使用请求的bean?

  • 我以为我可以通过禁用来绕过jsf检查字段状态 在表单上的javascipt代码中的字段打开然后提交表单,但那 也没有帮助。
  • 我不能使用视图范围,因为我必须设置几乎为什么 我的应用程序中的每个页面都在视图范围内。
  • 为此目的使用隐藏字段非常不方便, 因为它会使页面上的字段数翻倍。

也许我错过了一些干净的解决方案? 提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

使用JavaScript禁用字段不起作用可能是因为您在发送表单之前未启用它们。未发送已禁用字段的值(请参阅input documentation)。

例如,以下代码运行良好:

<h:form>
    <h:inputText id="disabledinput" styleClass="disabled"
        value="#{someBean.property}"></h:inputText>
    <h:outputScript>
        $('.disabled').attr('disabled', 'disabled');
    </h:outputScript>
    <h:commandButton action="#{someBean.action}"
        onclick="$('.disabled').removeAttr('disabled'); return true;"
        value="Submit" />
</h:form>

onclick属性执行JavaScript代码,该代码在发送表单之前启用输入。

如果您使用AJAX请求,则必须使用oncomplete或类似方法恢复禁用状态。

此解决方案的问题是用户可以操纵该值。例如。她/他可以在浏览器中使用javascript控制台将输入更改为启用或使用某些工具(例如curl)来准备或篡改请求。因此,如果值很敏感或者用户永远不应该更改,请考虑storing the value in the session

恕我直言,如果该值是由用户在前面的一个步骤中提供的,那么它并不重要。但是,如果计算了值(如总值或其他值),则不应依赖于其值,因为用户可以更改它。我个人更喜欢将值存储在服务器端(会话中或闪存中)。