我正在研究一个示例portlet,它应该向我显示登录到创辉门户网站时登录的用户作为管理员和登录的学生只看到自己并在我的代码中继续遇到错误,所以我不知道如何修复这些问题
当我添加overridden method does not thrown exception
PersonException
package com.test;
import javax.portlet.GenericPortlet;
import javax.portlet.ActionRequest;
import javax.portlet.RenderRequest;
import javax.portlet.ActionResponse;
import javax.portlet.RenderResponse;
import javax.portlet.PortletException;
import java.io.IOException;
import javax.portlet.PortletRequestDispatcher;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.sghe.luminis.person.entity.Person;
import com.sghe.luminis.person.exception.PersonException;
import com.sghe.luminis.person.services.PersonService;
import java.util.List;
import java.io.Writer;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* WebApplication6 Portlet Class
*
*
*/
public class WebApplication6 extends GenericPortlet {
public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException {
}
private static final Log cLog = LogFactory.getLog( WebApplication6.class );
public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException, PersonException {
PortletRequestDispatcher dispatcher =
getPortletContext().getRequestDispatcher("/WEB-INF/jsp/WebApplication6_view.jsp");
dispatcher.include(request, response);
response.setContentType("text/html");
PersonService personService = PersonServiceFactory.instance().getPersonService();
List<Person> persons = personService.fetchPagedPersons( "givenname", "", 10, "1" );
cLog.debug( "We have " + persons.size() + " people." );
}
}
这是我作为
使用的示例的/WEB-INF/jsp/WebApplication6_view.jsp
代码
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "=//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ page import="javax.portlet.*"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>
<portlet:defineObjects />
<%PortletPreferences prefs = renderRequest.getPreferences();%>
<%@page import="java.util.List"%>
<%@page import="com.sghe.luminis.person.entity.Person" %>
<%
List<Person> persons = (List<Person>)renderRequest.getPortletSession().getAttribute("PERSON_LIST");
%>
<html>
<head>
<meta http=equiv="Content=Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Person List</h1>
<table class="summit2" border="1 padding="2px">
<theader>
<th>Display Name</th>
<th>Login Id</th>
<th>Person Id</th>
</theader>
<% for (Person person: persons) {%>
<tr>
<td><%= person.getDisplayName() %></td>
<td><%= person.getLoginId() %></td>
<td><%= person.getPersonId() %></td>
</tr>
<% } %>
</table>
</body>
</html>
答案 0 :(得分:0)
根据Java Langauge Specification,覆盖类(8.4.8.3. Requirements in Overriding and Hiding)的方法:
更确切地说,假设B是类或接口,A是B的超类或超接口,B中的方法声明
n
覆盖或隐藏A中的方法声明m
。然后:
如果
n
有throws
子句提及任何已检查的异常类型,则m
必须有throws
子句或编译 - 发生时间错误。对于
throws
的{{1}}子句中列出的每个已检查异常类型,在n
的擦除中必须出现相同的异常类或其中一个超类型}throws
的条款;否则,发生编译时错误。如果
m
的未删除throws
子句在m
的{{1}}子句中不包含每种异常类型的超类型,则编译时未经检查警告发生。
您可以使用未经检查的例外:
throws
答案 1 :(得分:0)
虽然保罗对覆盖和异常肯定是正确的,但我认为您的解决方案的设计可能会有所改进。
为什么要首先将该异常抛给用户?我建议在代码中以更加可控的方式处理该异常,然后显示用户友好的错误消息。如果您只是让异常一直抛到顶部,那么它看起来会非常丑陋并使您的应用程序看起来不稳定且未经抛光。