0

我有一页:profile.jsp 和两个控制器:WorkController.java 和 GebruikerController.java。从我的 profile.jsp 我请求两件事:

GebruikerController.java中的用户信息:

<c:choose>
    <c:when test="${gebruikers.size() != 0}">
        <!-- Wanneer er gebruikers opgeslagen zijn, worden ze hier getoond -->
        <c:forEach var="tempGebruiker" items="${gebruikersUitSessie}">
            <!-- Per gebruiker wordt nu een rij aangemaakt met daarin zijn gegevens -->
            <div id="main_inner_left">
                <img src="${tempGebruiker.imageURL}" width="150" height="150">
            </div>
            <div id="main_inner_right">
                <table border="0">
                    <tr>
                        <td>
                            ${tempGebruiker.firstName} ${tempGebruiker.lastName}
                        </td>
                    </tr>
                    <tr>
                        <td>
                            E-mail: 
                        </td>
                        <td>
                            ${tempGebruiker.email}
                        </td>
                    </tr>
                    <tr>
                        <td>
                            Date of birth:
                        </td>
                        <td>
                            ${tempGebruiker.birthDay}-${tempGebruiker.birthMonth}-${tempGebruiker.birthYear}
                        </td>
                    </tr>
                    <tr>
                        <td>
                            Gender:
                        </td>
                        <td>
                            ${tempGebruiker.gender}
                        </td>
                    </tr>
                    <tr>
                        <td>
                            Country:
                        </td>
                        <td>
                            ${tempGebruiker.country}
                        </td>
                    </tr>
                    <tr>
                        <td>
                            City:
                        </td>
                        <td>
                            ${tempGebruiker.city}
                        </td>
                    </tr>
                    <tr>
                        <td></td>
                        <td>
                            <a href="profile/wijzig?id=${tempGebruiker.userNumber}">Edit profile</a>
                            <!--<a href="javascript:if(confirm('Weet u het zeker dat u deze gebruiker wil verwijderen?'))
                               window.location='profile/verwijder?id=${tempGebruiker.userNumber}';">Verwijder</a>-->
                        </td>
                    </tr>
                </table>
            </div>
        </c:forEach>
    </c:when>
    <c:otherwise>
        <!-- Als er geen gebruikers zijn, wordt deze melding getoond -->
        Er zijn geen gebruikers gevonden.
    </c:otherwise>
</c:choose>

以及来自 WorkController.java 的用户工作体验:

<c:forEach var="tempWork" items="${workUitSessie}">
    <table border="0">
        <tr>
            <td>
                ${tempWork.fromYear}-${tempWork.tillYear}
            </td>
            <td>
                ${tempWork.name}
            </td>
            <td>
                ${tempWork.profession}
            </td>
        </tr>
        <tr>
            <td>
                Description:
            </td>
            <td>
                ${tempWork.description}
            </td>
        </tr>
    </table>
</c:forEach>

上面的两个代码都位于我的 profile.jsp 中。

问题是每当我在浏览器上访问 profile.jsp 页面时,/profile 链接都会显示在链接选项卡中,并且它只显示用户信息(第一个代码)。每当我在浏览器的 profile.jsp 页面上,并且我在链接选项卡中手动将 /profile 更改为 /work 时,它只会显示工作经验信息。

网页.xml:

<servlet>
        <servlet-name>GebruikerController</servlet-name>
        <servlet-class>controllers.GebruikerController</servlet-class>
    </servlet>
<servlet-mapping>
        <servlet-name>GebruikerController</servlet-name>
        <url-pattern>/profile</url-pattern>
    </servlet-mapping>

<servlet>
        <servlet-name>WorkController</servlet-name>
        <servlet-class>controllers.WorkController</servlet-class>
    </servlet>
<servlet-mapping>
        <servlet-name>WorkController</servlet-name>
        <url-pattern>/work</url-pattern>
    </servlet-mapping>

如何在 profile.jsp 上同时显示两者?比如我可以同时请求两个控制器吗?例如

<servlet>
        <servlet-name>GebruikerController</servlet-name>
        <servlet-class>controllers.GebruikerController + controller.WorkController</servlet-class>
    </servlet>
<servlet-mapping>
        <servlet-name>GebruikerController</servlet-name>
        <url-pattern>/profile + /work</url-pattern>
    </servlet-mapping>
4

1 回答 1

1

毫无疑问,您希望每个 JSP 有一个 Servlet,然后它充当主控制器来初始化其他类和东西。这些检索数据并将其设置为您的 JSP。

他们在 web.xml 中定义它的方式(两个不同的 URL)被认为是不同的事情,所以无论你做什么,每个 URL 只会调用一个 servlet 实例。

因此,您可能想要创建一个 bean ProfileInformationHolder 或类似的能够保存信息的东西(可以说 Person-objects,每个对象都有对 WorkExperience-object 的引用)。然后让一个 Servlet 从两个类中收集信息(id 修改当前控制器)并准备 ProfileInformationHolder bean。完成此操作后,您将 ProfileInformationHolder bean 转发到您的 jsp,您可以在其中迭代所有信息并将它们显示在一个 url 下的一个位置。

更新:

这样的 java bean 没什么大不了的。它们基本上只由变量组成,并通过 get 和 set 来访问它们。

所以一个 bean Person 可能看起来像这样:

    public class MyPersonBean {

        private String name = "";

        public String getName(){
            return name;
        }

        public void setName(String name){
            this.name = name;
        }
    }

(抱歉,我不知道如何格式化源代码,而且我很沮丧地花费数小时尝试通过从我的 IDE 复制和粘贴来归档多年来工作的内容)。

我建议您就该主题做一个简短的教程,例如http://www.java-samples.com/showtutorial.php?tutorialid=552(未验证)或通过搜索“java jsp servlet bean”出现的任何其他内容”。你会很快进入它;)

于 2013-11-08T09:02:19.310 回答