LiftWeb рдкрд░ рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ

рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рд╡рд┐рд╖рдп рдкрдврд╝рд╛, рдореИрдВрдиреЗ рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдереЛрдбрд╝реА рдЦреЛрдЬ рдХреА рдЬреЛ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдЭрдВрдбреЗ рдХреЗ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рдореБрдЭреЗ рдпрд╣ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд▓рд┐рдЦрд╛ рдФрд░ рд▓рд┐рдЦрд╛ред LiftWeb рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред



рдореИрдВ рд▓реЗрдЦрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рднреА рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рддреБрд░рдВрдд рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдВрджрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдкрд╛рда рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝рддреЗ рд╣реБрдП рд╕реАрдзреЗ рдЕрднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред



рддреЛ, рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:



рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрдВрдХрд╛рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

mvn archetype:generate -DarchetypeGroupId=net.liftweb -DarchetypeArtifactId=lift-archetype-blank_2.8.1 -DarchetypeVersion=2.2-RC6 -DarchetypeRepository=http://scala-tools.org/repo-snapshots -DremoteRepositories=http://scala-tools.org/repo-snapshots -DgroupId=app.example -DartifactId=cpuflags -Dpackage=app.example.cpuflags







рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд╣рд▓реЗ рд╣реА рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ! рдорд╛рд╡реЗрди рдЬреЗрдЯреНрдЯреА: рд░рди рдФрд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 8080 рдкрд░ рдЬрд╛рдПрдВ





рд╣рд╛рдВ, рдЬрдмрдХрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдо рдЗрд╕реЗ рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗред



рд▓реЗрдХрд┐рди рд╢реБрд░реБрдЖрдд рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд┐рджреНрдзрд╛рдВрдд


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рдирд┐рдпрдорд┐рдд J2EE рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИред LiftFilter рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдПрдХрдорд╛рддреНрд░ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП web.xml рд╣реИ, рдЬреЛ рд╕рднреА рдЬрд╛рджреВ рдХрд░реЗрдЧрд╛ред



рдЖрд░рдВрдн рдХрд░рдиреЗ рдкрд░, рдлрд╝рд┐рд▓реНрдЯрд░ bootstrap.liftweb.Boot.boot рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рди рдкреИрдХреЗрдЬреЛрдВ рдореЗрдВ рд╕реНрдирд┐рдкреЗрдЯ рдЦреЛрдЬрдирд╛ рд╣реИ (рдмрд╛рдж рдореЗрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ) рд╕рд╛рде рд╣реА, рдЗрд╕ рдмрд╕-рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рддрд░реАрдХреЗ рд╕реЗ рдПрдХ рдореЗрдиреВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЕрдм рдЕрдиреБрд░реЛрдз рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЬрдм рдХреЛрдИ URL рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЙрдкрдпреБрдХреНрдд рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЯреЗрдореНрдкрд▓реЗрдЯ рдЦреЛрдЬрдиреЗ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдмреВрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░реНрдпрд╛рдкреНрдд рдЬреНрдЮрд╛рди рд╣реИ рдХрд┐ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╡реЗрдмрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ рдФрд░ рдЕрдиреБрд░реЛрдз URL рдкрд░ рдПрдХ рд╕реЗ рдПрдХ рдорд╛рдирдЪрд┐рддреНрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдЬрдм рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ: 8080 / index.html рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ index.html рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЗрд╕реА рддрд░рд╣ред



рдкреНрд░рддреНрдпреЗрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХ xml рдлрд╝рд╛рдЗрд▓ рд╣реИред рдпрд╣рд╛рдБ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди index.html рд╣реИ:

 <lift:surround with="default" at="content"> <h2>Welcome to your project!</h2> <p> <lift:helloWorld.howdy> <span>Welcome to cpuflags at <b:time/></span> </lift:helloWorld.howdy> </p> </lift:surround>
      
      





рдпрд╣рд╛рдБ LiftWeb рдХрд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╕реНрдирд┐рдкреЗрдЯреНрд╕ред рд╕реНрдирд┐рдкреЗрдЯ рдПрдХ рд╕реНрдХреЗрд▓рд╛ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ html рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИред



рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓рд┐рдлреНрдЯ: рд╕рд░рд╛рдЙрдВрдб рд╕реНрдирд┐рдкреЗрдЯ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ: HTML рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдореИрдкрд┐рдВрдЧред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрддрд╛ рд╣реИ:

  1. рдЯреЗрдореНрдкреНрд▓реЗрдЯ-рдЫрд┐рдкреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, default.html рдирд╛рдо рд╡рд╛рд▓реА рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЦреЛрдЬреА рдЧрдИ рд╣реИ (рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА html рдПрдХреНрд╕рдЯреЗрдВрд╢рди)

    рдпрд╣рд╛рдБ рдлрд╛рдЗрд▓ рд╣реИ:

     <html xmlns="http://www.w3.org/1999/xhtml" xmlns:lift="http://liftweb.net/"> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> <meta name="description" content="" /> <meta name="keywords" content="" /> <title>app.example:cpuflags:1.0-SNAPSHOT</title> <script id="jquery" src="/classpath/jquery.js" type="text/javascript"></script> </head> <body> <lift:bind name="content" /> <lift:Menu.builder /> <lift:msgs/> </body> </html>
          
          



  2. рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрджрд░, рд▓рд┐рдлрд╝реНрдЯ: рдмрд╛рдЗрдВрдб рдиреЛрдб рдХреЛ рдирд╛рдо рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдЦреЛрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдирд╛рдо рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)
  3. рд▓рд┐рдлреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА: рдмрд╛рдЗрдВрдб рдХреЛ рд▓рд┐рдлреНрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЯреЗрдореНрдкрд▓реЗрдЯ рд╕реЗ рдШрд┐рд░рд╛ рд╣реБрдЖ


рд╕реНрдирд┐рдкреЗрдЯ рд▓рд┐рдлреНрдЯ: helloWorld.howdy рдЕрдм рдПрдХ рдорд╛рдирдХ рд╕реНрдирд┐рдкреЗрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЙрддреНрдкрдиреНрди рд╣реИред рдЬрдм LiftWeb рдПрдХ рд╕реНрдирд┐рдкреЗрдЯ рд▓рд┐рдВрдХ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдпрд╣ рдПрдХ рдорд╛рдирдХ рд╕реНрдирд┐рдкреЗрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рд╕реНрдХреИрд▓рд╛ рдХреЛрдб рдХреЗ рдмреАрдЪ рдПрдХ рдЦреЛрдЬ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдмреВрдЯ рд╡рд┐рдзрд┐ рдореЗрдВ app.example.cpuflags рдкреИрдХреЗрдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, app.example.cpuflags.HelloWorld рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рдирдпрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдкрд░ рд╣рд╛рдЙрдбреА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдпрд╣рд╛рдБ рд╡рд┐рдзрд┐ рд╣реИ:

  def howdy(in: NodeSeq): NodeSeq = Helpers.bind("b", in, "time" -> (new _root_.java.util.Date).toString)
      
      





рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ: рдЕрдВрджрд░ (рдЬреЛ html рдЗрдирдкреБрдЯ рдореЗрдВ рдЖ рд░рд╣рд╛ рд╣реИ), рдмреА: рдЯрд╛рдЗрдо рдиреЛрдб (рдЬреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╣реИ) рдХреЛ рд╡рд░реНрддрдорд╛рди рддрд┐рдерд┐ рдХреЗ рд╕рд╛рде рдЦреЛрдЬрд╛ рдФрд░ рдмрджрд▓рд╛ рдЧрдпрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдкрд░реНрдпрд╛рдкреНрдд рд╕рд┐рджреНрдзрд╛рдВрдд, рдЕрднреНрдпрд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп


рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрджрд▓реЗрдВ:

 <lift:surround with="default" at="content"> <h2>Enter your CPU flags</h2> <form method="get"> <input type="text" name="flags"/> <input type="submit"/> </form> <table cellpadding="10"> <lift:CpuInfo.flags> <tr> <td><flag:name/></td> <td><flag:description/></td> </tr> </lift:CpuInfo.flags> </table> </lift:surround>
      
      





App.example.cpuflags.snippet.CpuInfo.scala рд╕реНрдирд┐рдкреЗрдЯ рдмрдирд╛рдПрдВ:

 package app.example.cpuflags.snippet import xml.NodeSeq import net.liftweb.util.BindHelpers._ import net.liftweb.http.{S} import java.util.Properties class CpuInfo { def flags(html: NodeSeq): NodeSeq = { val a1 = CpuFlags.getInfo(S.param("flags").openOr("")) a1.flatMap( p => bind("flag", html, "name" -> p._1, "description" -> p._2) ) } } object CpuFlags { val propertyMap = { val props = new Properties props.load(this.getClass.getClassLoader.getResourceAsStream("cpuflags.properties")) props } def getInfo(flags: String) = { val s = flags.trim.toUpperCase if (s.size>0) s.split(" +").toList.map( (flag) => (flag, if (propertyMap.getProperty(flag)!=null) propertyMap.getProperty(flag) else "UNKNOWN FLAG") ) else List() } }
      
      





cpuflags.properties рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рд╣реИ ред рд╕реВрдЪреА рдкреВрд░реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдФрд░ рдЖрдЧреЗ рдЦреЛрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд▓рд╕реА рдерд╛ред



рдпрд╣реА рд╣реИ, рдЬреЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ: рд░рди рдФрд░ рдЖрдирдиреНрджрд┐рдд рдХрд░реЗрдВ:





рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ



All Articles