Validation 将f的值更改为:selectItems为"&引用;从JSF2.15中的h:SelectOne菜单中选择导致问题的

Validation 将f的值更改为:selectItems为"&引用;从JSF2.15中的h:SelectOne菜单中选择导致问题的,validation,jsf-2,myfaces,selectonemenu,Validation,Jsf 2,Myfaces,Selectonemenu,根据这一回答: 默认情况下,JSF迭代f:selectItems中的值,以检查所选值最初是否确实在列表中 目前我有以下几点 <select id="selectList" size="1"> <option value="20" selected="selected">20</option> <option value="50">50</option> <option value="100">100</o

根据这一回答:

默认情况下,JSF迭代f:selectItems中的值,以检查所选值最初是否确实在列表中

目前我有以下几点

<select id="selectList" size="1">   
 <option value="20" selected="selected">20</option>
 <option value="50">50</option>
 <option value="100">100</option>
</select>

不,这不是正常的行为。然而,我无法在最新的Tomcat上再现与最新的Mojara的碰撞。如果您还告诉作为EL impl使用的容器impl/version也在这里起作用,这将非常有用。如果你将stacktrace全部发布,而不是将其过度概括为“崩溃”,这将非常有帮助。添加额外的信息,还可能在另一台机器上用虚拟项目复制错误。哦,你使用的是MyFaces而不是Mojarra。你试过最新的MyFaces吗?2.1.5相当古老(已经将近3年了)。他们可能同时修复了这个bug。2.1的实施目前已经达到2.1.16。甚至还有一个2.2实现,如2.2.5.will check所示,但在我的工作中,很难使用tomcat8和mojarra 2.2.8-02来推动这样的框架升级(这就是为什么我们使用如此旧的版本),崩溃不再发生。问题是,变量的asignation仍然存在,如果变量是一个整数,它现在将保留null值。
<option value="">50</option>
This is the current bean:

package com.test.bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

@ManagedBean
@SessionScoped
public class IndexBean {
    private int selectedValue;
    private int saveValue;

    public void updateValues(ValueChangeEvent ev){
        try{
            saveValue = Integer.parseInt(((HtmlSelectOneMenu) ev.getComponent()).getValue().toString());
        } catch(Exception ex){
            return;
        }
    }

    public List<SelectItem> getRowsPerPage(){
        List<SelectItem> rows = new ArrayList<>();
        rows.add(new SelectItem(20,"20"));
        rows.add(new SelectItem(50,"50"));
        return rows;
    }

    public int getSelectedValue() {
        return selectedValue;
    }

    public void setSelectedValue(int selectedValue) {
        this.selectedValue = selectedValue;
    }
}
   <?xml version="1.0" encoding="ISO-8859-1" ?>


<!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:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html">
<h:body>
<f:view>
    <h:form>
        <h:selectOneMenu value="#{indexBean.selectedValue}" valueChangeListener="#{indexBean.updateValues}" onchange="submit();">
            <f:selectItems value="#{indexBean.rowsPerPage}"></f:selectItems>
        </h:selectOneMenu>
    </h:form>
</f:view>
</h:body>
</html>
sep 10, 2014 10:01:38 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.IllegalArgumentException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.el.BeanELResolver.setValue(BeanELResolver.java:129)
    at javax.el.CompositeELResolver.setValue(CompositeELResolver.java:69)
    at org.apache.myfaces.el.unified.resolver.FacesCompositeELResolver.setValue(FacesCompositeELResolver.java:227)
    at org.apache.el.parser.AstValue.setValue(AstValue.java:158)
    at org.apache.el.ValueExpressionImpl.setValue(ValueExpressionImpl.java:249)
    at org.apache.myfaces.view.facelets.el.ContextAwareTagValueExpression.setValue(ContextAwareTagValueExpression.java:153)
    at javax.faces.component.UIInput.updateModel(UIInput.java:405)
    at javax.faces.component.UIInput.processUpdates(UIInput.java:327)
    at javax.faces.component.UIForm.processUpdates(UIForm.java:263)
    at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1372)
    at javax.faces.component.UIComponentBase.processUpdates(UIComponentBase.java:1372)
    at javax.faces.component.UIViewRoot._processUpdatesDefault(UIViewRoot.java:1338)
    at javax.faces.component.UIViewRoot.access$600(UIViewRoot.java:74)
    at javax.faces.component.UIViewRoot$UpdateModelPhaseProcessor.process(UIViewRoot.java:1453)
    at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1299)
    at javax.faces.component.UIViewRoot.processUpdates(UIViewRoot.java:799)
    at org.apache.myfaces.lifecycle.UpdateModelValuesExecutor.execute(UpdateModelValuesExecutor.java:38)
    at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:170)
    at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Unknown Source)