3

我刚从lift和scala开始,有一个我不太明白的问题。

我有以下 index.html

<html>
<head><title>title</title></head>
<body>
    <table>
        <lift:Members.list>
            <tr>
                <td><m:nick/></td>
            </tr>
        </lift:Members.list>
    </table>
</body>
</html>

以下代码段:

class Members {
  def list(xhtml: NodeSeq) =
  Member.findAll.flatMap(member => bind("m",xhtml
                                       ,"nick" -> member.nickName
    ))
}  

出于某种原因,我收到以下错误。我尝试了很多东西,但无法让它发挥作用。怎么了?

XML Parsing Error: prefix not bound to a namespace
Location: http://localhost:8080/hazardlift-1.0-SNAPSHOT/
Line Number 8, Column 25:<td><m:nick></m:nick></td>
-----------------------------^
4

2 回答 2

4

也许 lift 不知道如何处理您的返回值。尝试通过将其指定为返回类型来强制对 NodeSeq 进行隐式转换。

....
def list(xhtml: NodeSeq) : NodeSeq = 
....
于 2009-06-19T19:26:02.373 回答
0

我刚刚发现了这个错误的另一个原因 - 一个未解决的标签。

我有这个 HTML:

<div >
    <h3>Request Information</h3>

    <lift:DetailedRequestData.renderContent>
        <f:rowTag></f:rowTag>
    </lift:DetailedRequestData.renderContent>
</div>

我写这个是为了renderContent

def renderContent(ns: NodeSeq): NodeSeq = {
  val key = beginTrans(DisplayData.logger)
  var result = ns

  try {
    var requestID = DisplayData.getParameter("request")
    bind("f", ns, "rowTag" -> <p>Request ID: {requestID}</p>)
  }
  catch {
    case t: Throwable => DisplayData.logger.error("[DetailedRequestData$.renderContent] ", t)
  }

  endTrans(DisplayData.logger, key)
  result
}

由于我没有分配bindto的结果,所以result我返回了未修改的结果NodeSeq并得到了同样的prefix not bound to a namespace错误。将一个语句更改为:

    result = bind("f", ns, "rowTag" -> <p>Request ID: {requestID}</p>)

是的,这是我自己的愚蠢错误,但通过在此处记录问题,希望我能避免其他人遇到同样的问题,但不知道为什么。

于 2012-07-24T18:59:17.487 回答