Мое веб-приложение столкнулось с проблемой cdi param в Omnifaces после обновления сервера с tomee plume 7 до tomee plume 8. Я протестировал веб-приложение без косточек и подтвердил это.
Мой боб:
@javax.faces.view.ViewScoped
@javax.inject.Named
public class Bean2 implements java.io.Serializable {
@javax.inject.Inject @org.omnifaces.cdi.Param
private String tag;
private String tag2;
@javax.annotation.PostConstruct
public void init() {
if (getTag() == null || getTag().length()==0) {
setTag2("None injected");
}
else
setTag2(getTag() + " injected");
// Getters and setters
}
Мой просмотр JSF:
<h:body>
Tag: <h:outputText value="#{bean2.tag}" />
<br/>
<p:inputText readonly="true" value="#{bean2.tag2}"/>
</h:body>
Я пытался http://localhost:8080/test/inject2.jsf?tag=ABC, и это работает только один раз. Последующие испытания дают:
java.lang.IllegalArgumentException: Unknown property tag of class com.mycompany.Bean2
at org.apache.bval.jsr.job.ValidateProperty$FindDescriptor.handleProperty(ValidateProperty.java:216)
at org.apache.bval.jsr.job.ValidateProperty$WalkGraph.handleProperty(ValidateProperty.java:312)
Caused by: javax.el.ELException: Error reading [tag] on type [com.mycompany.Bean2$$OwbNormalScopeProxy0]
at javax.el.BeanELResolver.getValue(BeanELResolver.java:98)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELR...
Если я перезагружаю сервер, он также работает только один раз.
Моя среда Java: openjdk версия "1.8.0_191", Primefaces 6.1, Omnifaces 2.6.9. Я знаю, что не многие люди используют TomEE, но для информации, TomEE plume 7 основан на Tomcat 8, Mojarra JSF 2.2, тогда как TomEE plume 8 основан на Tomcat 9, Mojarra JSF 2.3. Разумеется, есть и другие отличия, но тестовое веб-приложение настолько простое, что на меня влияют только версия Tomcat и JSF с опущенной SAME jar.