2009-06-19 11 views
3

リフトとスカラで始まり、問題はありません。リフトスニペット:接頭辞がネームスペースにバインドされていません

私はfolowingの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 
    )) 
} 

を。 iveはたくさんのものを試しましたが、それを働かせることはできません。どうしましたか?

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

多分、リフトでは戻り値の処理方法がわかりません。それをreturntypeとして指定して、NodeSeqへの暗黙の変換を強制してください。

.... 
def list(xhtml: NodeSeq) : NodeSeq = 
.... 
+0

これはうまくいきました。 これをどのようにして発見できましたか?エラーは本当に有用ではありませんでした... –

+0

例外はあなたをログに誘導するはずです。 スニペットの一致に失敗したことがログに記録されることがあります。スニペットにはリターンタイプが必要なことが標準的なので、スニペットのdelcarationでタイプシグネチャをチェックするように促すはずです。 – Joe

0

このエラーのもう1つの原因、未解決のタグが見つかりました。

私はこのHTMLを持っていた:私はrenderContentのためにこれを書いていた

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

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

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 
} 

を私はresultbindの結果が割り当てられていなかったので、私はそのままNodeSeqを返していましたし、同じprefix not bound to a namespaceエラーが発生しました。 1つのステートメントを変更する:

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

はい、これは私自身の愚かなせいだったが、ここで問題を文書化することで、うまくいけば、私はこの同じ問題を抱えて、なぜ知らないから、他の誰かが保存されます。

関連する問題