【问题标题】:How to disable/enable JSF input field in JavaScript?如何在 JavaScript 中禁用/启用 JSF 输入字段?
【发布时间】:2015-06-24 05:37:29
【问题描述】:

我有一个 inputField 或其他一些标签,我想在用户点击它时禁用它。

like this 的东西,但我无法让它在 JSF 中工作。

$("div").click(function (evt) {
    $(this).hide().prev("input[disabled]").prop("disabled", false).focus();
});

我将 disabled=true" 添加到我的输入字段中,并在

上设置了 div 值(在这种情况下,所有父标签只有一个),类似于 j_idt13 和输入字段的 div,因此“div”值看起来像 j_idt13:inputID

有人可以帮我解决 jQuery 解决方案吗?

我想知道它可以在 JSF 中完成,以及如何完成。

【问题讨论】:

    标签: jquery jsf


    【解决方案1】:

    您需要通过服务器端切换它,而不是通过客户端。 JSF 作为基于有状态组件的 MVC 框架以这种方式防止被篡改/黑客请求,其中最终用户使用客户端语言/工具(如 HTML 或 JS)来操作 HTML DOM 树和/或 HTTP 请求参数,从而使 JSF 的结果disabledreadonly 甚至 rendered 属性已更改。

    想象一下,如果 JSF 开发人员在这样的布尔属性中检查用户的角色与管理员角色(如 disabled="#{not user.hasRole('ADMIN')}"),并且黑客以这样的方式操纵它,从而不再为非管理员用户禁用它,会发生什么情况。这正是您只能通过服务器端更改上述属性(以及required 属性和所有转换器、验证器、事件侦听器等)的原因。

    您可以在任何ClientBehaviorHolder 组件中使用<f:ajax> 来实现要求。你可以让JSF通过<h:panelGroup layout="block">生成一个HTML<div>,这也是一个ClientBehaviorHolder

    <h:form>
        <h:panelGroup layout="block">
            Click this div to toggle the input.
            <f:ajax event="click" listener="#{bean.toggle}" render="input" /> 
        </h:panelGroup>
        <h:inputText id="input" ... disabled="#{not bean.enabled}" />
    </h:form>
    

    有了这个 @ViewScoped 托管 bean(@RequestScoped 无法工作,原因在 commandButton/commandLink/ajax action/listener method not invoked or input value not updated 的 #5 中提到):

    @Named
    @ViewScoped
    public class Bean implements Serializable {
    
        private boolean enabled;
    
        public void toggle() {
            enabled = !enabled;
        }
    
        public boolean isEnabled() {
            return enabled;
        }
    
    }
    

    另见:


    与具体问题无关,如果您真的对如何通过 JS/jQuery 获取 JSF 组件的 HTML 表示感兴趣,请前往以下答案:

    【讨论】:

    • 非常感谢!!有什么原因不能在
    • 不客气。由于您是新来的,请不要忘记在回答(最)有助于理解和解决具体问题时将其标记为已接受。至于新问题,显然您使用它的方式错误(例如,连接到代表网格单元而不是 div 的 &lt;h:panelGroup&gt;,在这种情况下,只需嵌套另一个,以便正确表示 div;只需查看生成的 HTML 输出应该提供线索)。
    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 2016-03-20
    • 2018-01-14
    相关资源
    最近更新 更多