2009-06-19 1 views
3

im только начиная с лифта и 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 
    )) 
} 

по какой-то причине я получаю следующее сообщение об ошибке. 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

Возможно, лифт не справляется с возвращаемым значением. Попробуйте принудительное преобразование в NodeSeq, указав его как returntype.

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

Это сработало, спасибо большое. Как можно найти это в хорошем смысле? Ошибка не была очень полезной ... –

+0

Исключение должно направлять вас в журнал. Возможно, вы увидите в своем журнале, что произошел сбой при попытке сопоставить фрагмент. Стандартно, чтобы фрагменты нуждались в возвращаемых типах, поэтому вам следует попросить проверить подпись типа в фрагментации фрагмента. – Joe

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 
} 

Поскольку я не назначен результат bind к result, я возвращался немодифицированного NodeSeq и получил то же самое prefix not bound to a namespace ошибка. Изменение одного заявление:

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

Да, это было моей глупой ошибки, но путем документирования проблемы здесь, надеюсь, я спасу кого-то от того, эта же проблема, и не зная, почему.