如何在JavaScript中禁用/启用JSF输入字段?
我有一个inputField或其他标记,我想要禁用unitl用户点击它。
像这样的东西,但我不能让它在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 solutin帮我吗?
我想知道它可以在JSF中完成,以及如何完成。
您需要通过服务器端切换它,而不是通过客户端切换它。 JSF作为基于状态组件的MVC框架以这种方式保护以防止被篡改/被黑客入侵的请求,其中最终用户使用客户端语言/工具(如HTML或JS)来操纵HTML DOM树和/或HTTP请求参数,以便JSF的结果disabled
, readonly
或甚至rendered
属性被更改。
想象一下,如果JSF开发人员在这样的布尔属性中检查用户的角色会对管理员角色如此disabled="#{not user.hasRole('ADMIN')}"
并且黑客以这样的方式操纵它,会发生什么不再为非管理员用户禁用了。 这正是您只能通过服务器端更改上述属性(以及required
属性和所有转换器,validation器,事件侦听器等)的原因。
您可以在任何ClientBehaviorHolder
组件中使用
来实现该要求。 您可以让JSF通过
生成HTML
,它也是ClientBehaviorHolder
:
Click this div to toggle the input.
使用此@ViewScoped
托管bean(由于未调用commandButton / commandLink / ajax动作/侦听器方法的 #5中提到的原因或未更新输入值, @ViewScoped
将无法工作):
@Named @ViewScoped public class Bean implements Serializable { private boolean enabled; public void toggle() { enabled = !enabled; } public boolean isEnabled() { return enabled; } }
也可以看看:
- 当用户可以通过CSS,HTML,JavaScript,jQuery实现UI时,JSF的需求是什么?
- 为什么JSF会在服务器上保存UI组件的状态?
与具体问题无关 ,如果您真的对如何通过JS / jQuery获取JSF组件的HTML表示感兴趣,请转到以下答案:
- 如何使用jQuery选择JSF组件?
- 我怎么知道JSF组件的id,所以我可以在Javascript中使用