Start to play with lift now. My first issue is a simple guest book.
There are several guest notes in the guest book list page. I want to
display a reply form under each guest note. But I don't know how to
bind the reply form to its note record. How can I do with this? I'm
using Mapper now.
Below is the snippet and list page.
Thanks for your reply and time.
PS. As I was blocked from the google groups. I'm sorry to say that
maybe I cannot reply to your comment in time. Thanks again in advance.
gbook.html:
<lift:surround with="default" at="content">
<h1>Wellcome to my Guest Book</h1>
<lift:GuestBook.list >
<div>
<p><item:email /></p>
<p><item:title /></p>
<p><item:content /></p>
<item:reply />
</div>
</lift:GuestBook.list>
<lift:embed what="/templates-hidden/gbook/addForm" />
</lift:surround>
GuestBook.scala:
class GuestBook {
// Set up a requestVar to track the GuestNote object for edits and
adds
object noteVar extends RequestVar(new GuestNote())
def note = noteVar.is
def addNote(html: NodeSeq): NodeSeq = {
def doAdd() = {
if (isValideNote(note)) {
note.createdTime(new Date())
note.repliedByAdmin(0)
note.save
S.redirectTo("/gbook")
}
}
def isValideNote(toCheck : GuestNote) : Boolean =
List((if (toCheck.title.length == 0) { S.error("You must provide
a title"); false } else true),
(if (toCheck.email.length == 0) { S.error("You must provide a
email address"); false } else true),
(if (toCheck.content.length == 0) { S.error("You must provide
some note content"); false } else true)
).forall(_ == true)
bind("note", html,
"title" -> SHtml.text(note.title, note.title(_)),
"email" -> SHtml.text(note.email, note.email(_)),
"content" -> SHtml.textarea(note.content, note.content(_)),
"submit" -> SHtml.submit("Add my Note", doAdd))
}
def list(html: NodeSeq): NodeSeq = {
toShow.flatMap(item => {
curListNote = item
bind("item", html,
"title" -> item.title,
"email" -> item.email,
"content" -> item.content,
"reply" -> getReplyContent(item)
)
}
)
}
def replyNote(html: NodeSeq): NodeSeq = {
def doReply() = {
println((S.param("id") openOr "")+(S.param("replyContent")
openOr ""))
}
bind("note", html,
"replyContent" -> SHtml.textarea(curListNote.replyContent,
curListNote.replyContent(_)),
"submit" -> SHtml.submit("Reply", doReply)
)
}
private def toShow = GuestNote.findAll()
var curListNote: GuestNote = _
private def getReplyContent(item: GuestNote) = {
if (item.repliedByAdmin == 0) {
<div><p>Not replied by admin</p><lift:embed what="/templates-
hidden/gbook/replyForm" /></div>
}
else
<p>{"Replied by admin at: "+item.replyTime}</p>
}
}
/templates-hidden/gbook/addForm.html
<div>
<lift:GuestBook.addNote form="post">
<div>
<label>Title:</label><note:title />
</div>
<div>
<label>Email:</label><note:email />
</div>
<div>
<label>Your Note:</label><note:content />
</div>
<div><note:submit /></div>
</lift:GuestBook.addNote>
</div>
/templates-hidden/gbook/replyForm.html
<div>
<lift:GuestBook.replyNote form="post">
<div>
<label>Your Reply:</label><note:replyContent />
</div>
<div><note:submit /></div>
</lift:GuestBook.replyNote>
</div>
--
You received this message because you are subscribed to the Google Groups
"Lift" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/liftweb?hl=en.