Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Portlet重写的方法未引发异常_Java_Liferay_Portlet - Fatal编程技术网

Java Portlet重写的方法未引发异常

Java Portlet重写的方法未引发异常,java,liferay,portlet,Java,Liferay,Portlet,我正在开发一个示例portlet,它应该向我展示以管理员身份登录luminus portal的用户和登录的学生在我的代码中只看到自己并不断遇到错误,因此我不确定如何修复这些问题 这是我在添加PersonException package com.test; import javax.portlet.GenericPortlet; import javax.portlet.ActionRequest; import javax.portlet.RenderRequest; import java

我正在开发一个示例portlet,它应该向我展示以管理员身份登录luminus portal的用户和登录的学生在我的代码中只看到自己并不断遇到错误,因此我不确定如何修复这些问题

这是我在添加
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." ); 


   }
}
根据,要重写类()的方法,请执行以下操作:

更准确地说,假设B是类或接口,a是B的超类或超接口,B中的方法声明覆盖或隐藏a中的方法声明。然后:

  • 如果
    n
    有一个
    throws
    子句提到任何选中的异常类型,那么
    m
    必须有一个
    throws
    子句,否则会发生编译时错误

  • 对于
    n
    throws
    子句中列出的每个选中的异常类型,在擦除
    m
    throws
    子句时必须出现相同的异常类或其超类型之一;否则,将发生编译时错误

  • 如果
    m
    的unerased
    throws
    子句在
    n
    throws
    子句中不包含每个异常类型的超类型,则会出现编译时未检查警告

您可以使用未检查的异常:

public class PersonException extends RuntimeException { ... }

public class WebApplication6 extends GenericPortlet   {

    public void doView(RenderRequest request, RenderResponse response) 
         throws PortletException, IOException, PersonException  {
       ...
    }

}
    

虽然Paul在重写和异常方面绝对正确,但我认为您的解决方案的设计可能需要一些改进


首先,为什么要向用户抛出该异常?我建议您在代码中以更可控的方式处理该异常,然后显示一条用户友好的错误消息。如果让异常一直抛出到顶部,它将看起来非常丑陋,并使您的应用程序看起来不稳定和未经处理。

我可能更困惑于如何处理此异常,只是不要将异常抛出您的portlet。使用try-catch块检测何时发生错误,然后显示相应的错误消息。如果您让异常从doView中抛出,那么您就让LifeRay显示它选择的对用户可能没有用处的任何错误消息。好的,我现在部署我的portlet any nothing works没有用户数据,就像我从下面给出的示例中应该有的那样
public class PersonException extends RuntimeException { ... }

public class WebApplication6 extends GenericPortlet   {

    public void doView(RenderRequest request, RenderResponse response) 
         throws PortletException, IOException, PersonException  {
       ...
    }

}