feat: setting up mess of thymeleaf.
had problems with th:fragment, getting errors Caused by: ognl.OgnlException: source is null for getProperty(null, "text") now will try to style the page as if it's static page, and then add thymeleaf things
This commit is contained in:
parent
7fac41488c
commit
ec8c8bb678
|
@ -10,6 +10,6 @@ lazy val root = (project in file("."))
|
|||
libraryDependencies ++= Seq(
|
||||
"com.lihaoyi" %% "cask" % "0.9.1",
|
||||
"com.lihaoyi" %% "mainargs" % "0.5.0",
|
||||
"org.thymeleaf" % "thymeleaf" % "3.1.1.RELEASE"
|
||||
"org.thymeleaf" % "thymeleaf" % "3.1.1.RELEASE",
|
||||
)
|
||||
)
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
package testimonialsgrid;
|
||||
|
||||
public class JTestimonial {
|
||||
private String author;
|
||||
private String text;
|
||||
private int age;
|
||||
|
||||
// Constructor
|
||||
public JTestimonial(String author, String text, int age) {
|
||||
this.author = author;
|
||||
this.text = text;
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
// Getters
|
||||
public String getAuthor() {
|
||||
return author;
|
||||
}
|
||||
|
||||
public String getText() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public int getAge() {
|
||||
return age;
|
||||
}
|
||||
|
||||
// Setters
|
||||
public void setAuthor(String author) {
|
||||
this.author = author;
|
||||
}
|
||||
|
||||
public void setText(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
public void setAge(int age) {
|
||||
this.age = age;
|
||||
}
|
||||
}
|
|
@ -5,8 +5,10 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- displays site properly based on user's device -->
|
||||
|
||||
<link href="/dist/output.css" rel="stylesheet">
|
||||
<link href="../../../../dist/output.css" rel="stylesheet" th:remove="all">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href=".public/images/favicon-32x32.png">
|
||||
|
||||
|
||||
<link href="https://fonts.googleapis.com/css2?family=Barlow+Semi+Condensed:wght@500;600&display=swap" rel="stylesheet">
|
||||
<title>Frontend Mentor | [Challenge Name Here]</title>
|
||||
|
||||
<!-- Feel free to remove these styles or customise in your own stylesheet 👍 -->
|
||||
|
@ -15,59 +17,82 @@
|
|||
.attribution a { color: hsl(228, 45%, 44%); }
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-amber-200">
|
||||
Daniel Clifford
|
||||
Verified Graduate
|
||||
<body class="bg-light-grayish-blue py-20 px-7">
|
||||
<section
|
||||
th:fragment="testimonialCard(t)"
|
||||
class="bg-moderate-violet"
|
||||
th:remove="tag"
|
||||
>
|
||||
some unconditional text
|
||||
<p th:text="${t}">Daniel Clifford</p>
|
||||
<!-- <p th:text="${t.author}">author name</p> -->
|
||||
</section>
|
||||
|
||||
I received a job offer mid-course, and the subjects I learned were current, if not more so,
|
||||
in the company I joined. I honestly feel I got every penny’s worth.
|
||||
<p th:text="${oneTestimonial.author}">
|
||||
"Hello"
|
||||
</p>
|
||||
<!-- <section th:replace=":: testimonialCard(${oneTestimonial})"> </section> -->
|
||||
|
||||
“ I was an EMT for many years before I joined the bootcamp. I’ve been looking to make a
|
||||
transition and have heard some people who had an amazing experience here. I signed up
|
||||
for the free intro course and found it incredibly fun! I enrolled shortly thereafter.
|
||||
The next 12 weeks was the best - and most grueling - time of my life. Since completing
|
||||
the course, I’ve successfully switched careers, working as a Software Engineer at a VR startup. ”
|
||||
<div th:each="t : ${testimonials}">
|
||||
<span th:text="${t.author}">author</span> and <span th:text="${t.text}">the text</span>
|
||||
<!-- <section th:replace=":: testimonialCard(${testimonial})"> </section> -->
|
||||
</div>
|
||||
<section
|
||||
th:if="${#lists.isEmpty(testimonials)}"
|
||||
>
|
||||
Jonathan Walters
|
||||
Verified Graduate
|
||||
|
||||
Jonathan Walters
|
||||
Verified Graduate
|
||||
The team was very supportive and kept me motivated
|
||||
|
||||
The team was very supportive and kept me motivated
|
||||
“ I started as a total newbie with virtually no coding skills. I now work as a mobile engineer
|
||||
for a big company. This was one of the best investments I’ve made in myself. ”
|
||||
</section>
|
||||
|
||||
“ I started as a total newbie with virtually no coding skills. I now work as a mobile engineer
|
||||
for a big company. This was one of the best investments I’ve made in myself. ”
|
||||
<section
|
||||
th:if="${#lists.isEmpty(testimonials)}"
|
||||
>
|
||||
Jeanette Harmon
|
||||
Verified Graduate
|
||||
|
||||
Jeanette Harmon
|
||||
Verified Graduate
|
||||
An overall wonderful and rewarding experience
|
||||
|
||||
An overall wonderful and rewarding experience
|
||||
“ Thank you for the wonderful experience! I now have a job I really enjoy, and make a good living
|
||||
while doing something I love. ”
|
||||
</section>
|
||||
|
||||
“ Thank you for the wonderful experience! I now have a job I really enjoy, and make a good living
|
||||
while doing something I love. ”
|
||||
<section
|
||||
th:if="${#lists.isEmpty(testimonials)}"
|
||||
>
|
||||
Patrick Abrams
|
||||
Verified Graduate
|
||||
|
||||
Patrick Abrams
|
||||
Verified Graduate
|
||||
Awesome teaching support from TAs who did the bootcamp themselves. Getting guidance from them and
|
||||
learning from their experiences was easy.
|
||||
|
||||
Awesome teaching support from TAs who did the bootcamp themselves. Getting guidance from them and
|
||||
learning from their experiences was easy.
|
||||
“ The staff seem genuinely concerned about my progress which I find really refreshing. The program
|
||||
gave me the confidence necessary to be able to go out in the world and present myself as a capable
|
||||
junior developer. The standard is above the rest. You will get the personal attention you need from
|
||||
an incredible community of smart and amazing people. ”
|
||||
</section>
|
||||
|
||||
“ The staff seem genuinely concerned about my progress which I find really refreshing. The program
|
||||
gave me the confidence necessary to be able to go out in the world and present myself as a capable
|
||||
junior developer. The standard is above the rest. You will get the personal attention you need from
|
||||
an incredible community of smart and amazing people. ”
|
||||
<section
|
||||
th:if="${#lists.isEmpty(testimonials)}"
|
||||
>
|
||||
Kira Whittle
|
||||
Verified Graduate
|
||||
|
||||
Kira Whittle
|
||||
Verified Graduate
|
||||
Such a life-changing experience. Highly recommended!
|
||||
|
||||
Such a life-changing experience. Highly recommended!
|
||||
|
||||
“ Before joining the bootcamp, I’ve never written a line of code. I needed some structure from
|
||||
professionals who can help me learn programming step by step. I was encouraged to enroll by a former
|
||||
student of theirs who can only say wonderful things about the program. The entire curriculum and staff
|
||||
did not disappoint. They were very hands-on and I never had to wait long for assistance. The agile team
|
||||
project, in particular, was outstanding. It took my learning to the next level in a way that no tutorial
|
||||
could ever have. In fact, I’ve often referred to it during interviews as an example of my developent
|
||||
experience. It certainly helped me land a job as a full-stack developer after receiving multiple offers.
|
||||
100% recommend! ”
|
||||
“ Before joining the bootcamp, I’ve never written a line of code. I needed some structure from
|
||||
professionals who can help me learn programming step by step. I was encouraged to enroll by a former
|
||||
student of theirs who can only say wonderful things about the program. The entire curriculum and staff
|
||||
did not disappoint. They were very hands-on and I never had to wait long for assistance. The agile team
|
||||
project, in particular, was outstanding. It took my learning to the next level in a way that no tutorial
|
||||
could ever have. In fact, I’ve often referred to it during interviews as an example of my developent
|
||||
experience. It certainly helped me land a job as a full-stack developer after receiving multiple offers.
|
||||
100% recommend! ”
|
||||
</section>
|
||||
|
||||
<div class="attribution">
|
||||
Challenge by <a href="https://www.frontendmentor.io?ref=challenge" target="_blank">Frontend Mentor</a>.
|
||||
|
|
|
@ -7,6 +7,8 @@ import org.thymeleaf.context.Context
|
|||
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver
|
||||
import org.thymeleaf.TemplateEngine
|
||||
|
||||
import scala.jdk.CollectionConverters._
|
||||
|
||||
object Main {
|
||||
@main def run(
|
||||
@arg(
|
||||
|
@ -42,7 +44,54 @@ object Main {
|
|||
@cask.get("/")
|
||||
def index() = {
|
||||
val context = new Context()
|
||||
context.setVariable("name", s"Johny")
|
||||
|
||||
import scala.beans.BeanProperty
|
||||
final case class Testimonial(
|
||||
@BeanProperty var author: String,
|
||||
@BeanProperty var text: String,
|
||||
@BeanProperty var age: Int
|
||||
)
|
||||
|
||||
class CompatTestimonial {
|
||||
@BeanProperty var author: String = _
|
||||
@BeanProperty var text: String = _
|
||||
@BeanProperty var age: Int = _
|
||||
|
||||
// Auxiliary constructor
|
||||
def this(author: String, text: String, age: Int) = {
|
||||
this() // Call to the primary constructor
|
||||
this.author = author
|
||||
this.text = text
|
||||
this.age = age
|
||||
}
|
||||
}
|
||||
val yo = new CompatTestimonial("Leopold", "Miawu", 188)
|
||||
// val yo = Testimonial("Leopold", "Miawu", 188)
|
||||
|
||||
// let's experiment. ugh
|
||||
class Person(
|
||||
@BeanProperty var firstName: String,
|
||||
@BeanProperty var lastName: String,
|
||||
@BeanProperty var age: Int
|
||||
) {
|
||||
override def toString: String =
|
||||
return String.format("%s, %s, %d", firstName, lastName, age)
|
||||
}
|
||||
val p = new Person("Efim", "Nefedov", 31)
|
||||
println(p)
|
||||
// println(p.getFirstName)
|
||||
|
||||
val ugh = new JTestimonial("Hell", "lala", 1234)
|
||||
|
||||
context.setVariable("justString", "oh why oh why")
|
||||
context.setVariable("oneTestimonial", ugh)
|
||||
context.setVariable(
|
||||
"testimonials",
|
||||
List(
|
||||
new JTestimonial("Leopold", "Miawu", 91),
|
||||
new JTestimonial("Aragorn", "And my sword!", 55)
|
||||
).asJava
|
||||
)
|
||||
val result = templateEngine.process("index", context)
|
||||
cask.Response(
|
||||
result,
|
||||
|
|
Loading…
Reference in New Issue