f:viewParam не передает обязательный параметр при использовании нового пространства имен xmlns.jcp.org
Я пытаюсь использовать Glassfish 4.0 с пространствами имен Java EE 7 XML для тестирования приведенного ниже примера.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<title>Title</title>
</h:head>
<h:body>
<h:form>
<ul>
<ui:repeat value="#{appLoad.movieList}" var="movie">
<li>
<h:link value="#{movie.title}" outcome="movie" includeViewParams="true">
<f:param name="id" value="#{movie.id}"/>
</h:link>
</li>
</ui:repeat>
</ul>
</h:form>
</h:body>
</html>
Это ссылки на следующую страницу movie.xhtml
:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets"
xmlns:f="http://xmlns.jcp.org/jsf/core">
<h:head>
<f:metadata>
<f:viewParam name="id" value="#{appLoad.movieId}"/>
<f:event listener="#{appLoad.movieDetail()}" type="preRenderView"/>
</f:metadata>
</h:head>
<h:body>
<h:form>
<h:panelGrid columns="2">
<h:panelGrid columns="1" width="400">
<h:panelGrid columns="1">
Title : <h:outputLabel value="#{appLoad.movie.title}"/>
</h:panelGrid>
</h:panelGrid>
</h:panelGrid>
</h:form>
</h:body>
</html>
#{appLoad}
боб является
@ManagedBean
@RequestScoped
public class AppLoad {
@EJB
private MovieFacade movieFacade;
private Movie movie = new Movie();
private List<Movie> movieList;
private int movieId;
@PostConstruct
public void movieDetail(){
movieList = movieFacade.findAll();
movie = movieFacade.find(movieId);
System.out.println(movieId);
}
// Getters+setters.
}
Когда страница индекса запущена и ссылка нажата, URL-адрес сразу же изменяется на
result.xhtml? ID =8
Но данные не отображаются. Это пустое. Я понял что #{appLoad.movieId}
является null
, Другими словами, <f:viewParam>
не устанавливает этот параметр запроса.
Единственное, что мне пришлось обойти, - это изменить пространства имен XML обратно на более старую версию.
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
Я предполагаю, что здесь что-то не так. Как эта проблема вызвана и как я должен использовать новые пространства имен XML?
1 ответ
Как новый xmlns.jcp.org
Пространства имен XML, которые были обработаны, сломаны в первых выпусках Mojarra 2.2.0 и 2.2.1. Это было исправлено в Mojarra 2.2.2 (примечание: билет в ссылке описывает другой симптом проблемы, но под прикрытием это, по сути, та же причина). Рекомендуется обновить до Mojarra 2.2.2. В состав GlassFish 4.0 входит Mojarra 2.2.0. Вы можете получить JAR от http://javaserverfaces.java.net/. Все, что вам нужно сделать, это заменить javax.faces.jar
файл в GlassFish's /modules
папка с более новой версией.
Подобные проблемы, кстати, не редкость в самом первом крупном выпуске GlassFish (все спешат подготовить его вовремя). Я рекомендую подождать с Java EE 7 до выпуска GlassFish 4.0.1 или 4.1, чтобы избежать будущих сюрпризов. Обратите внимание, что другие производители, такие как Apache Tomcat и JBoss AS, не спешат выпускать стабильный контейнер Java EE 7; у них в настоящее время еще нет готовой к выпуску версии.