gpt4 book ai didi

java - 使用 jQuery 动态更改输入值不会操作 JSF 组件的 ajax onchange 事件

转载 作者:行者123 更新时间:2023-12-02 03:00:54 26 4
gpt4 key购买 nike

我正在尝试在很长的表单上实现自动保存功能。

我在 JSF 中有这个表单,其中有很多 <h:inputText/> ,由于 @NotNull javax 验证注释,这些 <h:selectOneMenu> 不能为 null 或空。另外,我有一些 <f:ajax event="change" render="form-blueform-pnl_team" execute="form-blueform-pnl_team" listener="${improvementView.onTeamChange()}" /> 具有

<h:inputText/>

动态更新其他一些 <h:inputText> 值。

提交如下:

<h:commandButton action="${improvementView.save()}" styleClass="btn btn-primary ink-reaction marginleft5 hidden" id="save-blueform-btn">
<f:ajax execute="@all" render="@all"/>
</h:commandButton>
<a href="#" id="form-blueform-save-blueform-btn-ui" class="btn btn-primary ink-reaction marginleft5">
<i class="fa fa-save"></i> Save
</a>

jQuery 接收 #form-b​​lueform-save-blueform-b​​tn-ui 的点击事件并验证一些内容。一切正常后,单击#form-b​​lueform-save-blueform-b​​tn。在此之前一切都运行良好。

当我动态地想要使用 $(#someinput).val("new value") 更改 JSF 输入的值时,问题就开始发生。该值确实发生了完美的变化,但是下拉列表的 ajax onchange 事件 - 例如 - 没有被执行。另外,如果我尝试提交表单,jQuery 验证显示正常,但 JSF 验证失败,提示所有内容均为空。本质上,JSF 组件无法识别 jQuery 值的更改。

我已经为此苦苦挣扎了一段时间,但找不到任何有用的东西。如果有人能在这里指导我,我将非常感激。

在这里您可以找到我的代码的更多片段:

这就是我的 ojit_code 的样子

<h:inputText id="name" value="${improvementView.item.name}" styleClass="form-control" pt:required="required" />

这就是我的 jQuery 处理 #form-b​​lueform-save-blueform-b​​tn-ui 点击的方式:

$("#form-blueform-save-blueform-btn-ui").click(function(e) {
var valid = $(".form-blueform")[0].checkValidity();
if(valid) {
$(".card-actionbar-row .btn").hide();
$("#form-blueform-loading-submit").css({"display":"inline-block"});
$("#form-blueform-save-blueform-btn").click();
} else {
$(".form-blueform")[0].reportValidity();
}
e.preventDefault();
});

这是Tomcat返回的日志:

WARNING: ${improvementView.save()}: java.lang.IllegalArgumentException: can't parse argument number: interpolatedMessage='may not be null' javax.faces.FacesException: ${improvementView.save()}: java.lang.IllegalArgumentException: can't parse argument number: interpolatedMessage='may not be null' at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) at javax.faces.component.UICommand.broadcast(UICommand.java:315) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.madatait.ci.security.filters.AuthenticationFilter.doFilter(AuthenticationFilter.java:46) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)

并且对每个不能为空的输入重复该操作。

最佳答案

好吧,我终于明白了。我必须使用 jQuery 的 .change() 手动触发每个输入的 onchange 事件,以便执行 ajax 并且 JSF 识别值的动态变化。

$(".form-control").each(function() { 
$(this).change();
});

我确信这至少会为某人节省几个美好的时间。

关于java - 使用 jQuery 动态更改输入值不会操作 JSF 组件的 ajax onchange 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42376157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com