Java JSF不显示第一行、第一列数据
我有一个非常简单的页面,显示固定数据。我在使用数据库中的数据时遇到了这个问题,所以我制作了这个简单的示例,但仍然存在这个问题。当会话首次导航到此页面时,第一行的第一列不显示任何数据 无论我是否将作用域更改为请求或会话,使用firefox或IE也没有什么区别。我所知道的是,如果我重新加载页面或导航离开并返回,它将突然显示我的数据,直到我关闭该浏览器的所有实例并加载新实例。然后,在我重新加载页面之前,它不会显示我的数据 问题是为什么我最喜欢的第一本书的第一个标题在我重新加载页面之前从未出现(“操作系统概念”没有显示,但“Silberschatz”显示) 以下是相关代码 HomePage.java:Java JSF不显示第一行、第一列数据,java,jsf,missing-data,Java,Jsf,Missing Data,我有一个非常简单的页面,显示固定数据。我在使用数据库中的数据时遇到了这个问题,所以我制作了这个简单的示例,但仍然存在这个问题。当会话首次导航到此页面时,第一行的第一列不显示任何数据 无论我是否将作用域更改为请求或会话,使用firefox或IE也没有什么区别。我所知道的是,如果我重新加载页面或导航离开并返回,它将突然显示我的数据,直到我关闭该浏览器的所有实例并加载新实例。然后,在我重新加载页面之前,它不会显示我的数据 问题是为什么我最喜欢的第一本书的第一个标题在我重新加载页面之前从未出现(“操作系
public class HomePage {
private Book[] books;
public HomePage() {
books = new Book[3];
books[0] = new Book("Operating System Concepts", "Silberschatz");
books[1] = new Book("Learning Sql", "Beaulieu");
books[2] = new Book("Effective Java", "Bloch");
}
public Book[] getBooks() {
return books;
}
public void setBooks(Book[] books) {
this.books = books;
}
}
Book.java
public class Book {
private String title;
private String author;
public Book() {}
public Book(String title, String author) {
this.title = title;
this.author = author;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
home.jsp:
<html>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<link href="../css/styles.css" rel="stylesheet" type="text/css" />
<f:loadBundle basename="omitted.for.anonymity.bundle.home" var="msgs"/>
<f:view>
<body>
<h:form>
<h:panelGrid columns="2" columnClasses="sideControlColumn,contentColumn">
<f:facet name="header">
<f:subview id="header">
<jsp:include page="header.jsp" />
</f:subview>
</f:facet>
<f:subview id="sideControl" >
<jsp:include page="sideControl.jsp" />
</f:subview>
<h:dataTable value="#{homePage.books}"
var="book"
styleClass="homeTable"
rowClasses="evenColumn,oddColumn"
>
<h:column>
<f:facet name="header">
<h:outputText value="#{msgs.columnHeader1}"/>
</f:facet>
<h:outputText value="#{book.title}" />
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="#{msgs.columnHeader2}"/>
</f:facet>
<h:outputText value="#{book.author}" />
</h:column>
</h:dataTable>
</h:panelGrid>
</h:form>
</body>
</f:view>
</html>
faces-config.xml:
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<navigation-rule>
<from-view-id>/pages/login.jsp</from-view-id>
<navigation-case>
<from-outcome>login</from-outcome>
<to-view-id>/pages/home.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/pages/home.jsp</from-view-id>
<navigation-case>
<from-outcome>searchForBooks</from-outcome>
<to-view-id>/pages/searchCriteria.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/pages/searchCriteria.jsp</from-view-id>
<navigation-case>
<from-outcome>searchForBooks</from-outcome>
<to-view-id>/pages/searchCriteria.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/pages/searchResults.jsp</from-view-id>
<navigation-case>
<from-outcome>searchForBooks</from-outcome>
<to-view-id>/pages/searchCriteria.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/pages/searchCriteria.jsp</from-view-id>
<navigation-case>
<from-outcome>search</from-outcome>
<to-view-id>/pages/searchResults.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>book</managed-bean-name>
<managed-bean-class>omitted.for.anonymity.beans.Book</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>homePage</managed-bean-name>
<managed-bean-class>omitted.for.anonymity.beans.page.HomePage</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>searchCriteriaPage</managed-bean-name>
<managed-bean-class>omitted.for.anonymity.beans.page.SearchCriteriaPage</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>searchResultsPage</managed-bean-name>
<managed-bean-class>omitted.for.anonymity.beans.page.SearchResultsPage</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>
</faces-config>
/页面/login.jsp
登录
/pages/home.jsp
/pages/home.jsp
寻书
/pages/searchCriteria.jsp
/pages/searchCriteria.jsp
寻书
/pages/searchCriteria.jsp
/pages/searchResults.jsp
寻书
/pages/searchCriteria.jsp
/pages/searchCriteria.jsp
搜索
/pages/searchResults.jsp
书
省略.for.anonymity.beans.Book
一场
主页
省略.for.anonymity.beans.page.HomePage
一场
搜索标准页面
省略.for.anonymity.beans.page.SearchCriteriaPage
一场
搜索结果页面
省略.for.anonymity.beans.page.SearchResultsPage
要求
设置书籍
请求范围变量的表:
<h:dataTable value="#{homePage.books}"
var="book"
styleClass="homeTable"
rowClasses="evenColumn,oddColumn">
<managed-bean>
<managed-bean-name>book</managed-bean-name>
<managed-bean-class>omitted.for.anonymity.beans.Book</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
只是猜测,但我想知道表达式语言是否出于某种原因正在解析会话bean。它不应该是“搜索页面、请求、会话和应用程序范围中具有给定名称的属性并返回它,如果没有具有当前名称的属性,则返回null”。但表达式语言实现中存在错误的可能性并不是没有的。尝试更改var
属性的名称以避免冲突,或使用{requestScope.book.title}
将其显式解析为作用域
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
我从doctype中注意到您正在使用JSF1.1。如果可以的话,我建议至少升级到1.2(最好是2.0)。你就是那个人。我添加了那一行,但它只将问题转移到了作者栏。另外,向author列添加相同的修复程序修复了所有问题。您假设EL-care中可能存在一个“bug”,以详细说明requestScope前缀的“作用”以及您认为这可以解决它的原因?向上投票并选中标记为正确答案的复选框-还将研究升级JSF实现。我知道有很多依赖项需要追踪(必须与特定的jsp规范以及类似的东西相匹配),jsp规范定义了变量解析的严格顺序。隐式变量(如requestScope和sessionScope)总是首先解析。使用此前缀意味着EL不会通过范围查找来解析对象。有关定义的顺序和隐式变量列表(可能是JSR245或JSR152),请参见您的JSP规范版本。