Переменная из класса в jspx

98
27 ноября 2021, 09:00

Всем доброго дня. Сильно не пинайте, ибо не знаю, что ещё нужно выложить, чтобы решить проблему. Помогите пожалуйста, не получается вывести на странице jspx результат запроса из java класса. Просто отобразить то, что выходит в консоль на страничке, переменную stat. В консоли результат выходит как надо. GIT

Pom.xmls

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.0.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>name.alexkosarev.tutorials</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.0.0</version>
<packaging>war</packaging>
<name>spring-boot-starter-parent</name>
<description>Demo project for Spring Boot</description>
<properties>
    <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.16</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- JSTL for JSP -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <!-- Need this to compile JSP -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- Need this to compile JSP,
        tomcat-embed-jasper version is not working, no idea why -->
    <dependency>
        <groupId>org.eclipse.jdt.core.compiler</groupId>
        <artifactId>ecj</artifactId>
        <version>4.6.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
</project>

Контроллер

@Controller
@RequestMapping("/")
@Configuration
@ComponentScan("com.repositories")
public class OptionsController {
@Autowired
private JobformService jobformService = new JobformServiceImpl();

@RequestMapping(value = "/options/create", method = RequestMethod.POST)
public String options(JobForm jobForm) {
    jobformService.addJobForm(jobForm);
    return "redirect:/options";
}

@RequestMapping(value = "/options")
public String getAllByWorkdate(Model model, String work_date) {
    System.out.println("CONTR get all by work date");
    List<JobForm> jobForms = jobformService.getAllByWorkdate(work_date);
    model.addAttribute("optionsList", jobForms);
    return "/options";
}
@RequestMapping(value = "/options/delete{id}", method = RequestMethod.GET)
public String removeJobform(@PathVariable("id") long id) {
    jobformService.removeJobForm(id);
    return "redirect:/options";
}
    @RequestMapping(value = "/options/getstatistics")
public String getStatistics(Model model) {
    String stat = jobformService.getStatistics();
    model.addAttribute("statlist", stat);
    System.out.println(stat);
    return "redirect:/statistics";
}
}

Страница jspx

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
      xmlns="http://www.w3.org/1999/xhtml" version="2.0"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
>
<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>
<jsp:output doctype-root-element="html"
            doctype-system="about:legacy-compat"
            omit-xml-declaration="true"/>
<html>
<head>
    <title>Statistics</title>
</head>
<body>
<img src="https://www.sherloglatvia.com/wp-content/uploads/2016/06/logo.png" 
alt="sherlog" width="90" height="50"/>
<h1>Statistics</h1>
<div style="float: bottom">
    <table>
        <tr>
            <th>Montaz</th>
        </tr>
        <tr>
           <td><c:out value="${statlist}"/></td>
        </tr>
    </table>
</div>
<div style="float: right">
    <form action="${pageContext.request.contextPath}/options/getstatistics" 
method="get">
        <p>
            <label for="date"> Выберите месяц: </label><br/>
            <input id="date" type="month" name="workdate"/>
            <br/>
            <button class="add_button"> Pievienot</button>
        </p>
    </form>
</div>
<div style="height: 200px; width: 100px; border: 3px dashed #e03c32; float: 
left">
    <p>
        <strong><a href="/">Years list</a></strong> <br/>
        <strong><a href="/year2019">Month list</a></strong><br/>
        <strong><a href="/statistics">Statistics</a></strong>
    </p>
</div>
</body>
</html>
</jsp:root>

WebConfig

package com.config;
import org.springframework.context.annotation.Configuration;
import 
org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import 
org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
    registry.jsp("/WEB-INF/views/", ".jspx");
}
}

Страница, где вывожу данные из БД

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
      xmlns="http://www.w3.org/1999/xhtml" version="2.0"
      xmlns:c="http://java.sun.com/jsp/jstl/core"
      >
<jsp:directive.page contentType="text/html" pageEncoding="UTF-8"/>
<jsp:output doctype-root-element="html"
            doctype-system="about:legacy-compat"
            omit-xml-declaration="true"/>
<html>
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <link rel="stylesheet"
          href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"/>
    <style>
        .navbar {
            overflow: hidden;
            background-color: #333;
            font-family: Arial, Helvetica, sans-serif;
        }
        .navbar a {
            float: left;
            font-size: 16px;
            color: white;
            text-align: center;
            padding: 14px 16px;
            text-decoration: none;
        }
        .dropdown {
            float: left;
            overflow: hidden;
        }
        .dropdown .dropbtn {
            cursor: pointer;
            font-size: 16px;
            border: none;
            outline: none;
            color: white;
            padding: 14px 16px;
            background-color: inherit;
            font-family: inherit;
            margin: 0;
        }
        .navbar a:hover, .dropdown:hover .dropbtn, .dropbtn:focus {
            background-color: red;
        }
        .dropdown-content {
            display: none;
            position: absolute;
            background-color: #f9f9f9;
            min-width: 160px;
            box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
            z-index: 1;
        }
        .dropdown-content a {
            float: none;
            color: black;
            padding: 12px 16px;
            text-decoration: none;
            display: block;
            text-align: left;
        }
        .dropdown-content a:hover {
            background-color: #ddd;
        }
        .show {
            display: block;
        }
        td, th {
            border: 1px solid #dddddd;
            text-align: left;
            padding: 8px;
        }
        .remove_button {
            padding: 10px 15px;
            font-size: 24px;
            text-align: center;
            cursor: pointer;
            outline: none;
            color: #e60000;
            background-color: #00008B;
            border: none;
            border-radius: 15px;
            box-shadow: 0 9px #999;
        }
        .add_button {
            padding: 15px 25px;
            font-size: 24px;
            text-align: center;
            cursor: pointer;
            outline: none;
            color: #fff;
            background-color: #00008B;
            border: none;
            border-radius: 15px;
            box-shadow: 0 9px #999;
        }
        button:hover {
            background-color: #3e8e41;
        }
        button:active {
            background-color: #3e8e41;
            box-shadow: 0 5px #666;
            transform: translateY(4px);
        }
        textarea {
            position: absolute;
            top: 98px;
            right: 450px;

        }
        table {
            position: absolute;
            top: 200px;
            left: 210px;
        }

    </style>
    <title>Title</title>
</head>
<body>

<a></a><img src="https://www.sherloglatvia.com/wp-content/uploads/2016/06/logo.png" alt="sherlog" width="90" height="50"/>

<br/>
<div style="float: right">
    <form action="${pageContext.request.contextPath}/options/create" method="post">
        <label for="car">Ievadi A/M marku un numuru</label><br/>
        <input type="text" name="car" id="car" size="40"/><br/>
        <br/>
        <label for="client">Ievadi klientu un tel.</label><br/>
        <input id="client" type="text" name="client" size="40"/>
        <br/>
        <br/>

        <label for="sistem">Izvelejies sistemu</label>
        <div><select id="sistem" name="sistem"> size="3" multiple="multiple"
            <option value="Optimum"/>
            optimum
            <option value="mini"/>
            mini
            <option value="comfort"/>
            comfort
        </select></div>
        <br/>
        <div><label for="work">Izvelejies darba veidu</label><br/>
            <select id="work" name="work"> size="3" multiple="multiple"
                <option value="Montaz"/>
                montaz
                <option value="Remont"/>
                remont
                <option value="Snjatie"/>
                snjatie
            </select></div>
        <br/>
        <div><label for="manager">Kas veic ierakstu</label><br/>
            <select id="manager" name="manager"> size="3" multiple="multiple"
                <option value="Agnese"/>
                Agnese
                <option value="Kristine"/>
                Kristine
                <option value="Aigars"/>
                Aigars
            </select></div>
        <p><label for="date"> Выберите дату: </label><br/>
            <input id="date" type="date" name="workdate" />
        </p>
        <br/>
        <br/>
        <br/>
        <!--        <input type="submit" value="Pievienot"/>-->
        <p>
            <button class="add_button"> Pievienot</button>
        </p>
        <p><label for="info"></label>
            <textarea style="left: 210px" id="info" cols="60" rows="6" name="info">info</textarea></p>
    </form>
        <table style="word-wrap: break-word"  border="7">
            <tr>
                <th>Date</th>
                <th>Manager</th>
                <th>Car</th>
                <th>Client</th>
                <th>Info</th>
                <th>Sistem</th>
                <th>Work</th>
                <th>Action</th>
            </tr>
            <c:forEach var="JobForm" items="${optionsList}">
                <tr>
                    <td width="75">${JobForm.workdate}</td>
                    <td width="50">${JobForm.manager}</td>
                    <td width="50">${JobForm.car}</td>
                    <td width="50">${JobForm.client}</td>
                    <td width="50">${JobForm.info}</td>
                    <td width="50">${JobForm.sistem}</td>
                    <td width="50">${JobForm.work}</td>
                    <td width="50"><a href="/options/delete${JobForm.id}">Delete</a></td>
                </tr>
            </c:forEach>
        </table>
</div>
<br/>
<div style="height: 200px; width: 100px; border: 3px dashed #e03c32; float: left">
    <p>
        <strong><a href="/">Years list</a></strong> <br/>
        <strong><a href="/year2019">Month list</a></strong><br/>
        <strong><a href="/statistics">Statistics</a></strong>
    </p>
</div>
</body>
</html>

не понимаю что куда написать. Примеры с выводом данных из базы нашёл в достаточном количестве, а вот просто переменную не могу. Либо криво ищу , либо не понимаю что искать. Делаю первые шаги в спринге и пока не очень получается. Спасибо.

Answer 1

Для вывода одиночной строковой переменной воспользутесь:

<c:out value = "${statistics}"/>

Этот код нужно использовать вместо вашего блока с forEach (который применяется при работе с коллекциями, которых у вас нет).

<c:forEach var="statistics" items="${statistics}">
            <tr>
                <td>${statistics.stat}</td>
            </tr>
        </c:forEach>
READ ALSO
Запрос разрешения на сохранение в съёмном хранилище Android Java

Запрос разрешения на сохранение в съёмном хранилище Android Java

Я хочу сделать возможность записи файлов на съёмный носительДело в том, что при попытки записи на него показывает ошибку open failed: EACCES (Permission...

81
Что не так с Spring Security

Что не так с Spring Security

Когда отправляю POST-запрос через postman на /oauth/token я вношу параметры username, password, grant_type=password (application/x-www-form-urlencoded) Мне приходит ответ:

190
Найти все омоглифы символа

Найти все омоглифы символа

Доброго времени суток

119
Занести цифры числа в массив

Занести цифры числа в массив

Я хочу занести цифры числа в массив, но на деле мой цикл не делает этогоОн вносит максимум 4 цифры

197