Java-класс в JSP

Поэтому я не знаю, как правильно импортировать класс Java. Я работаю с Eclipse Tomcat 7 и LifeRay. в liferay это каталог с IMG-файлами, я открою каталог с Java. Это хорошо работает (локально) и я получаю массив с путями. поэтому я создам портлет в liferay в jsp и получу массив в jsp. есть идеи? мой JSP:

<%@ page import ="OpenDir" %>
<%@ page import="java.io.File"%>

<%=
    OpenDir.Dir()
%>

моя ява:

package life_ray;

import java.io.File;

public class OpenDir {

    public static void Dir() {

        int i = 0;
        File directory = new File(
                "C:\\Users\\Public\\Pictures\\Sample Pictures\\");
        File[] contents = directory.listFiles();
        for (File f : contents) {
            f.getAbsolutePath();
            i++;
        }
        String[] name = new String[i];

        i = 0;
        for (File f : contents) {
            name[i] = f.getAbsolutePath();
            i++;
        }
        i = 0;
        for (File f : contents) {
            name[i] = f.getAbsolutePath();
            System.out.println("<img src=\"" + name[i] + "\" alt=\"\">");
            i++;
        }

    }
}







so here is my error:
Caused by: org.apache.jasper.JasperException: Unable to compile class for JSP: 

An error occurred at line: 14 in the generated java file
Only a type can be imported. life_ray.OpenDir resolves to a package

An error occurred at line: 7 in the jsp file: /view.jsp
OpenDir cannot be resolved
4: <body>
5: 
6:  <%=
7:      OpenDir.Dir()
8:  %>
9: 
10: 

3 ответа

Решение

Чтобы перейти к уже сделанным ответам, возможно, имеет смысл начать рефакторинг вашего кода:

Джава:

package life_ray;

import java.io.File;
import javax.servlet.jsp.JspWriter;

public class OpenDir {

    public static File[] listSamplePictures() {
        File f = new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\");
        return f.listFiles();
    }

    public static void printSamplePictures(JspWriter w) {
        File[] files = listSamplePictures();
        for (int i = 0; i < files.length; i++) {
            w.println("<img src=\"" + files[i].getAbsolutePath() + "\" alt=\"\">");
        }
    }

}

JSP:

<%
    java.io.File[] files = life_ray.OpenDir.listSamplePictures();
    for (int i = 0; i < files.length; i++) {
        out.println("<img src=\"" + files[i].getAbsolutePath() + "\" alt=\"\">");
    }
%>

или же

<%
    life_ray.OpenDir.printSamplePictures(out);
%>

System.out.println() будет печатать сообщения в вашем стандартном выводе (это будет журнал сервера или консоль, с которой вы запустили сервер). Вы должны напечатать материал, используя HttpServletResponse.getWriter() если вы хотите, чтобы это было показано на веб-странице.

Однако то, что вы показали, это действительно странный способ написания Java-приложений и использования JSP...

Ты класс OpenDir находится в пакете с именем life_ray, Так что вам нужно изменить свой импорт на

<%@ page import ="life_ray.OpenDir" %>

Я не рекомендовал бы подчеркивать в названиях пакетов все же.

Редактировать:

Кроме того, вы пытаетесь вывести значение Dir() метод, который является пустым, так что вы не получите никакого вывода, кроме как в файле журнала. Как уже упоминалось в другом ответе, ваш шаблон - это странный способ написания веб-приложения.

Другие вопросы по тегам