东西like this,但我不能让它在JSF中工作.
$("div").click(function (evt) { $(this).hide().prev("input[disabled]").prop("disabled", false).focus(); });
我在我的输入字段中添加了disabled = true“,在< h:form>上设置了div值(在这种情况下所有父标签只有一个),类似于j_idt13和输入字段的div,所以”div“值看起来像j_idt13:inputID
有人可以用jQuery solutin帮我吗?
我想知道它可以在JSF中完成,以及如何完成.
您需要通过服务器端切换它,而不是通过客户端切换它. JSF作为基于状态组件的MVC框架以这种方式保护以防止被篡改/被黑客入侵的请求,其中最终用户使用客户端语言/工具(如HTML或JS)来操纵HTML DOM树和/或HTTP请求参数,以便JSF的结果禁用,只读或甚至渲染属性被更改.想象一下,如果JSF开发人员在这样的布尔属性中检查用户的角色会对管理员角色如此禁用=“#{not user.hasRole(‘ADMIN’)}”并且黑客以这样的方式操纵它,会发生什么不再为非管理员用户禁用了.这正是您只能通过服务器端更改上述属性(以及所需的属性和所有转换器,验证器,事件侦听器等)的原因.
你可以使用< f:ajax>在任何ClientBehaviorHolder
组件中都能达到要求.您可以让JSF生成HTML< div>通过< h:panelGroup layout =“block”> ;,这也是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; } }
也可以看看:
> What is the need of JSF, when UI can be achieved from CSS, HTML, JavaScript, jQuery?
> Why JSF saves the state of UI components on server?
与具体问题无关,如果您真的对如何通过JS / jQuery获取JSF组件的HTML表示感兴趣,请转到以下答案:
> How to select JSF components using jQuery?
> How can I know the id of a JSF component so I can use in Javascript