使用Spring Boot 3创建网页_Groovy模板

首先

“Groovy Templates”是一种模板引擎。

首先参考文献

请原生地用中文进行释义,只需要给一个选项:
https://www.shuwasystem.co.jp/book/9784798069166.html

以下是提供的释义选项:

https://www.shuwasystem.co.jp/book/9784798069166.html 可提供的含义连接为:

环境

    • 開発環境:Eclipse 2022-12 (4.26.0)

 

    • Java 17.0.5

 

    • フレームワーク:SpringBoot 3.1.0

 

    ビルドツール:gradle

预备

or

准备

创建一个新项目

新規作成.jpg

Gradle

    • 「spring-boot-starter-groovy-templates」・・・Groovy templatesテンプレートエンジン

 

    • 「spring-boot-starter-web」・・・Webパッケージ

 

    • 「spring-boot-starter-data-jpa」・・・DBアクセスするために必要

 

    「spring-boot-starter-test」・・・コードテストするために必要
plugins {
	id 'java'
	id 'org.springframework.boot' version '3.1.2'
	id 'io.spring.dependency-management' version '1.1.2'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
	sourceCompatibility = '17'
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-groovy-templates'
	implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	runtimeOnly 'com.h2database:h2'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

配置文件(Groovy的配置)

    • 「cache=false」・・・キャッシュOFF

 

    「suffix=.tpl」・・・ビュー名に追加される拡張子はtpl
spring.groovy.template.cache=false
spring.groovy.template.suffix=.tpl

应用程序类(保持自动生成的状态)

package com.example.groovy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GroovyStudyApplication {

	public static void main(String[] args) {
		SpringApplication.run(GroovyStudyApplication.class, args);
	}

}

桌子

package com.example.groovy;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity
@Table(name="account")
public class Account {
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column
	private long id;
	
	@Column(length = 50, nullable = false)
	private String name;
	
	@Column(length = 200, nullable = true)
	private String mail;

	public Account() {
	}
	
	public Account(String name, String mail) {
		this.name = name;
		this.mail = mail;
	}

	public long getId() {
		return id;
	}
	public String getName() {
		return name;
	}
	public String getMail() {
		return mail;
	}
}
package com.example.groovy.repositories;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import com.example.groovy.Account;

@Repository
public interface AccountRepository extends JpaRepository<Account, Long> {

}

控制器类

initメソッドインスタンス生成後に呼び出される(PostConstructアノテーションによって)
Accountテーブルにデータ投入しているgetDataメソッドGET /getData アクセス時に呼び出される
mav.setViewName(“getData”);で画面表示に使うテンプレートを指定(getData.tpl)
package com.example.groovy.controller;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.servlet.ModelAndView;

import com.example.groovy.Account;
import com.example.groovy.repositories.AccountRepository;

import jakarta.annotation.PostConstruct;

@Controller
public class IndexController {
	
	@Autowired
	AccountRepository repository;

	@PostConstruct
	public void init() {
		List<Account> accountList = new ArrayList<>();
		accountList.add(new Account("ichiro", "example1@example.com"));
		accountList.add(new Account("jiro", "example2@example.com"));
		accountList.add(new Account("saburo", "example3@example.com"));
		
		repository.saveAllAndFlush(accountList);
	}

	@GetMapping("/getData")
	public ModelAndView getData(@ModelAttribute("formModel") Account account, ModelAndView mav) {
		mav.setViewName("getData");
        mav.addObject("title", "タイトル表示");
		mav.addObject("message", "メッセージ表示");
        mav.addObject("flag1", true);
        mav.addObject("flag2", false);

		Iterable<Account> list = repository.findAll();
		mav.addObject("data", list);
		
		return mav;
	}
}

模板

yieldUnescaped '<!DOCTYPE html>'

html(lang:'ja') {
	head {
		meta(charset:"UTF-8")
		title("繰り返し")
		link(rel:"stylesheet", type:"text/css",
			href:"https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css")
	}
	body(class:"container"){
		h1(class:"display-4 mb-4", title)
		p(message)
		div (class:"alert alert-primary") {
			if (flag1) {
				p("flag1がtrueの時に出力されるよ")
			} else {
				p("flag1がfalseだったら出力")	
			}
			if (flag2) {
				p("flag2がtrueの時に出力されるよ")
			} else {
				p("flag2がfalseだったら出力")	
			}
		}

		div (class:"card") {
			div (class:"card-body") {
				h3(class:"card-title", "アカウント一覧")
				data.each {
					p(class:"card-text", it.id + "" + it.name + "/" + it.mail)
				}
			}
		}
	}
}

点击右键运行项目,选择”运行”,然后选择”Spring Boot”应用程序。

我可以表达出来。

画面.jpg
广告
将在 10 秒后关闭
bannerAds