selectOneMenu Validation Error
Hi.
As usual, I'm experiencing state-of-art problems with JSF.
Here is a nice and simple login form:
Login.jsp
<h:form id="login">
<h:panelGrid columns="2" styleClass="Grid">
<h:outputText value="#{msg.Username}:" />
<h:inputText id="username" value="#{LoginBean.userName}"
maxlength="50" required="true" />
<h:outputText value="#{msg.Password}:" />
<h:inputText id="password" value="#{LoginBean.passWord}"
maxlength="50" required="true" />
<h:outputText value="#{msg.Language}:" />
<h:selectOneMenu id="language" value="#{LoginBean.locale}">
<f:selectItems value="#{LoginBean.selectList}" />
</h:selectOneMenu>
<f:facet name="footer">
<h:commandButton styleClass="Button" value="#{msg.Submit}"
action="#{LoginBean.logIn}" />
</f:facet>
</h:panelGrid>
</h:form>
LoginBean.java
public String getLocale()
{
if (this.locale ==null)
this.locale ="tr_TR";
return this.locale;
}
publicvoid setLocale(String locale)
{
this.locale = locale;
FacesContext context = FacesContext.getCurrentInstance();
context.getViewRoot().setLocale(new Locale(this.locale));
}
public SelectItem[] getSelectList()
{
SelectItem[] List =new SelectItem[2];
List[0] =new SelectItem("tr_TR","TR");
List[1] =new SelectItem("en_US","EN");
return List;
}
If I deploy applicationbefore running Tomcat, I got:
body:login:language: Validation Error: Value is not valid
If I deploy applicationafter running Tomcat it works.
Any ideas ?
# 2
OK I find the problem..
I noticed that when tomcat (6.0.x)static deploy the app I got a exception:
SEVERE: Error Instantiating ExpressionFactory
java.lang.ClassNotFoundException: com.sun.el.ExpressionFactoryImpl
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.sun.faces.config.ConfigureListener.registerELResolverAndListenerWithJsp(ConfigureListener.java:1606)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:455)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4336)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:760)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:740)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:920)
at org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:883)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:492)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1022)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:451)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288)
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413)
which does not occurs in dynamic deploy.
Then (after googling) I add following code to web.xml and that and all other strange problems are gone.
<context-param>
<param-name>com.sun.faces.expressionFactory</param-name>
<param-value>org.apache.el.ExpressionFactoryImpl</param-value>
</context-param>
I hate english by teh way.