سؤال

لدي صفحة بسيطة للغاية تعرض البيانات المعلبة. لقد عانيت من هذه المشكلة مع البيانات من DB لذلك قمت بإجراء هذا المثال البسيط ولا يزال لديك المشكلة. عند التنقل إلى هذه الصفحة لأول مرة للحصول على جلسة، فإن العمود الأول في الصف الأول يظهر أي بيانات.

لا يهم إذا قمت بتغيير نطاق الطلب أو الجلسة، ولا يحدث فرقا إذا كنت أستخدم Firefox أو IE. كل ما أعرفه هو أنه إذا قمت بإعادة تحميل الصفحة أو انتقل بعيدا، فستظهر كل شيء مفاجئ عرض بياناتي - حتى أغلق كافة مثيلات هذا المتصفح وتحميل واحد جديد. ثم، مرة أخرى، لن تظهر بياناتي حتى أحمل الصفحة.

السؤال هو السبب في عدم إظهار عنوان بلدي الحبيب الأول من كتابي الأول حتى لا تظهر أبدا إعادة تحميل الصفحة ("مفاهيم نظام التشغيل" لا تظهر، ولكن "silberschatz" يفعل)؟

أدناه هو الرمز المناسب.

homepage.java:

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>
هل كانت مفيدة؟

المحلول

الجدول الذي يحدد book طلب متغير نطاق:

<h:dataTable value="#{homePage.books}"
    var="book"
    styleClass="homeTable"
    rowClasses="evenColumn,oddColumn">

الفاصوليا المدارة التي تحدد book متغير نطاق الجلسة:

<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>

مجرد التخمين، لكنني أتساءل عما إذا كانت لغة التعبير حلول الجلسة هنا لسبب ما. لا ينبغي - scopedattributeelresolver. "يبحث في الصفحة، طلب، الجلسة، نطاقات التطبيق لسمة مع الاسم المحدد وإرجاعه، أو 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 أنك تستخدم JSF 1.1. أوصي بالترقية إلى 1.2 على الأقل (يفضل 2.0) إذا استطعت.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top