我有一个页面: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页面上,并在链接选项卡中手动更改/配置文件/工作时,它只显示工作体验信息。
的web.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上同时显示两者?我可以例如同时请求两个控制器吗? e.g。
<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>
答案 0 :(得分:1)
你当然希望每个JSP有一个Servlet,然后作为主控制器来启动其他类和东西。那些检索数据并将其设置为您的JSP。
他们在web.xml中定义它(两个不同的URL)的方式被认为在事物之间有所不同,所以无论你做什么,每个URL只调用一个servlet实例。
所以你可能想要创建一个bean ProfileInformationHolder或类似能够保存信息的东西(比如说Person对象,每个对象都有一个对WorkExperience-object的引用)。 然后让一个Servlet收集来自两个类的信息(id修改当前的控制器)并准备ProfileInformationHolder bean。完成此操作后,您将ProfileInformationHolder bean转发到您的jsp,您可以在其中迭代所有信息并将其显示在一个URL下的一个位置。
更新:
这样的java bean并不是一个大故事。它们基本上只包含变量,get和set可以访问它们。
所以bean人看起来像这样:
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”得到的任何其他东西。你会很快进入它;)