我用 ajax 事件编写了我的第一个 JSF 页面,但没有工作;当提交表单异常发生时 IllegalStateException 想法是在选中复选框时更改激活写作的 inputText 的颜色。看看下面的内容。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Ins Student</title>
</h:head>
<h:form id="windowPrinc" prependId="false">
<h:panelGrid id="griglia" columns="4">
<h:outputLabel value="Matricola....................:"></h:outputLabel>
<h:inputText id="id_matricola" style="background-color:#{controllerInsertStudent.color_idStudente};border-style:solid;
border-color:Brown;border-width:medium;"
readonly="#{!controllerInsertStudent.forzaMatricola}" title="matricola dello studente"
value="#{controllerInsertStudent.idStudente}">
</h:inputText>
<h:outputLabel value=" Forza Matricola...........:"/>
<h:selectBooleanCheckbox id="id_checkBox" value="#{controllerInsertStudent.forzaMatricola}">
<f:ajax> execute="id_checkBox" listener="#{controllerInsertStudent.changeForzaMatricola}" render="id_matricola" </f:ajax>
</h:selectBooleanCheckbox>
</h:panelGrid>
<h:outputLabel value="Nome:........................:" />
<h:inputText id="id_nome" style="border-style:solid;border-color:Brown;border-width:medium;" value="#{controllerInsertStudent.nome}">
</h:inputText>
<h:commandButton value="Inserisci" action="#{controllerInsertStudent.CreateStudente}">
<f:ajax execute="@form" />
</h:commandButton>
</h:form>
</html>
这个托管 bean
@ManagedBean
@ViewScope
public class ControllerInsertStudent {
FacesContext ctx = FacesContext.getCurrentInstance();
private Long idStudente;
// etc.
public Boolean getForzaMatricola()
{
return forzaMatricola;
}
public void setForzaMatricola(Boolean forzaMatricola)
{
this.forzaMatricola = forzaMatricola;
}
public void changeForzaMatricola(AjaxBehaviorEvent ev) throws AbortProcessingException
{
// dummy
}
public String CreateStudente()
{
String value = ctx.getExternalContext().getRequestParameterMap().get("id_matricola");
if(!value.equals(""))
this.idStudente = new Long(value);
// etc.
}
}
堆栈错误(控制台 Eclipse)
17:54:52,916 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http- localhost-127.0.0.1-8080-1) #{controllerInsertStudent.CreateStudente}: java.lang.IllegalStateException: javax.faces.FacesException: #{controllerInsertStudent.CreateStudente}: java.lang.IllegalStateException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.component.UICommand.broadcast(UICommand.java:315) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:329) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:248) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:275) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:161) [jbossweb-7.0.13.Final.jar:]
at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:153) [jboss-as-web-7.1.1.Final.jar:7.1.1.Final]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:155) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [jbossweb-7.0.13.Final.jar:]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:368) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:877) [jbossweb-7.0.13.Final.jar:]
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:671) [jbossweb-7.0.13.Final.jar:]
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:930) [jbossweb-7.0.13.Final.jar:]
at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_13]
Caused by: javax.faces.el.EvaluationException: java.lang.IllegalStateException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102) [jsf-impl-2.1.7-jbossorg-2.jar:]
... 20 more
Caused by: java.lang.IllegalStateException
at com.sun.faces.context.FacesContextImpl.assertNotReleased(FacesContextImpl.java:655) [jsf-impl-2.1.7-jbossorg-2.jar:]
at com.sun.faces.context.FacesContextImpl.getExternalContext(FacesContextImpl.java:140) [jsf-impl-2.1.7-jbossorg-2.jar:]
at org.controllers.beans.ControllerInsertStudent.CreateStudente(ControllerInsertStudent.java:237) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.7.0_13]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) [rt.jar:1.7.0_13]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_13]
at java.lang.reflect.Method.invoke(Method.java:601) [rt.jar:1.7.0_13]
at org.apache.el.parser.AstValue.invoke(AstValue.java:262) [jbossweb-7.0.13.Final.jar:]
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) [jbossweb-7.0.13.Final.jar:]
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105) [jsf-impl-2.1.7-jbossorg-2.jar:]
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88) [jboss-jsf-api_2.1_spec-2.0.1.Final.jar:2.0.1.Final]
... 21 more