【问题标题】:Lift - Snippet Failure Method not found提升 - 未找到代码段失败方法
【发布时间】:2013-01-24 21:55:54
【问题描述】:

我已将此添加到我的 Boot.scala 中

LiftRules.viewDispatch.append({
  case List("admin", "categories") => Right(Admin)
})

这是我的 Admin.scala(管理员/视图包)

object Admin extends LiftView{

  def dispatch = {
    case "add" => editCategory
  }

  def editCategory(): NodeSeq = {
    <lift:embed what="/admin/add_category"></lift:embed>
  }
}

这是我的 add_category 模板 -

<lift:surround with="admin" at="content">
  <div class="container-fluid" id="main_container">
    <lift:Admin:addCategory form="POST" class="form-horizontal">
      <fieldset>
        <legend>Add Category</legend>
        <div class="control-group">
          <label class="control-label" for="cat_name">Name</label>
          <div class="controls">
            <cat:name></cat:name>
          </div>
        </div>
        <div class="control-group">
          <label class="control-label" for="cat_desc">Description</label>
          <div class="controls">
            <cat:desc></cat:desc>
            <cat:submit></cat:submit>
          </div>
        </div>
      </fieldset>
    </lift:Admin:addCategory>
  </div>
</lift:surround>

我正在尝试使用addCategory 方法将其与(admin/sn-p 包)中的 sn-p -Admin.scala 绑定。

 object name extends RequestVar("")
  object desc extends RequestVar("")

  def addCategory(in: NodeSeq): NodeSeq = {
    def doAdd() {
      //todo: Save Category
    }

    bind("cat", in,
      "name" -> SHtml.text(name.is, (n: String) => name(n), ("id", "cat_name"), ("class", "input-large")),
      "desc" -> SHtml.textarea(desc.is, (d: String) => desc(d), ("id", "cat_desc"), ("class", "input-large")),
      "submit" -> SHtml.submit("Save", doAdd, ("class", "btn btn-info"))
    )
  }

我收到此错误 -

Error processing snippet: admin:addcategory 
Reason: Method Not Found 
XML causing this error: 
 <lift:admin:addcategory class="form-horizontal" form="POST">
      <fieldset>
        <legend>Add Category</legend>
        <div class="control-group">
          <label for="cat_name" class="control-label">Name</label>
          <div class="controls">
            <cat:name></cat:name>
          </div>
        </div>
        <div class="control-group">
          <label for="cat_desc" class="control-label">Description</label>
          <div class="controls">
            <cat:desc></cat:desc>
            <cat:submit></cat:submit>
          </div>
        </div>
      </fieldset>
    </lift:admin:addcategory>

在日志中 -

[net.liftweb.http.LiftRules] - Snippet Failure: SnippetFailure(/admin/categories/add -> ParsePath(List(admin, categories, add),,true,false),Full(admin:addcategory),Method Not Found)

需要帮助。我无法弄清楚为什么 lift 找不到方法。

【问题讨论】:

    标签: scala lift


    【解决方案1】:

    您是否已将您的 admin 包添加到 LiftRules 中?这样的事情应该允许 Lift 搜索 admin.snippets 的分辨率:

    LiftRules.addToPackages("admin")
    

    另外,我相信您需要将 sn-p 称为 Admin.addCategory 而不是 :

    编辑:

    我相信 Lift HTML5 解析器是区分大小写的,并且遇到了驼峰式方法名称的问题。您可能想尝试将您的方法重命名为全部小写,或尝试将您的 sn-p 称为(而不是使用 &lt;lift: 样式):

    <div class="lift:admin.addCategory"> ... </div>
    
       or
    
    <div data-lift="admin.addCategory"> ... </div>
    

    【讨论】:

    • 是的。我已将管理包添加到 Liftrules。我也试过了。和:
    • 同一个 sn-p 类中的其他方法也可以正常工作!
    • @Shwetanka,我刚刚用另一个可能的建议编辑了答案
    • 另外,要详细说明我的编辑,请看:assembla.com/spaces/liftweb/wiki/HtmlProperties_XHTML_and_HTML5 特别是第一个要点:HTML5 viaHtml5Properties
    • 是的,谢谢 - 我将表单构造更改为这个 -
      现在它可以工作了。:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2019-02-21
    • 2017-12-13
    • 1970-01-01
    • 2021-11-26
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多