1

Liftで画像upladを実装したい。これで始めまし。リフト初心者です。

私はいくつかの変更を加えました。今のところ、何かが機能するのを見たいだけです。必ずしもイメージではありません。これまでのところ、私は持っています:

package code 
package snippet 
import net.liftweb.http.S
import net.liftweb.common.Full
import net.liftweb.common.Empty
import net.liftweb.common.Box
import net.liftweb.http.FileParamHolder
import net.liftweb.util._
import Helpers._
import scala.xml.Group
import scala.xml.NodeSeq
import net.liftweb.http.SHtml

class AddEntry {

  // Add a variable to hold the FileParamHolder on submission
  var fileHolder : Box[FileParamHolder] = Empty

  def doTagsAndSubmit (t : String) {

//    val e : Expense = ...
    // Add the optional receipt if it’s the correct type
    val receiptOk = fileHolder match {
      // An empty upload gets reported with a null mime type,
      // so we need to handle this special case
      case Full(FileParamHolder(_, null, _, _)) => true

      case Full(FileParamHolder(_, mime, _, data))
        if mime.startsWith("image/") => {
//          e.receipt(data).receiptMime(mime)
          true
        }

      case Full(_) => {
        S.error("Invalid receipt attachment")
        false
      }

      case _ => true
    }

//    (e.validate, receiptOk) match {
//    }
}

  def addEntry(content: NodeSeq): NodeSeq = {

      bind("prefix", content,
              "receipt" -> SHtml.fileUpload(fileHolder = _)) //compiler error: type mismatch; found : net.liftweb.http.FileParamHolder required: net.liftweb.common.Box[net.liftweb.http.FileParamHolder]
  }
}

html:

<lift:AddEntry.addEntry form="POST" multipart="true">
    <td>Receipt (JPEG or PNG)</td>
<td><prefix:receipt /></td>
</lift:AddEntry.addEntry>

コードでコメントされているように"receipt" -> SHtml.fileUpload(fileHolder = _)、コンパイラ エラーが発生します。エラー: タイプの不一致。見つかりました: net.liftweb.http.FileParamHolder 必須: net.liftweb.common.Box[net.liftweb.http.FileParamHolder]

fileHolder は type であるため、理解できませんBox[FileParamHolder]。という式に関連しているはずですがfileHolder = _、方法がわかりません。

前もって感謝します。

4

1 に答える 1

3

API からSHtml.fileUploadは a を提供しているように見えFileParamHolderますが、変数fileHolderの型Box[FileParamHolder]は であるため、これら 2 つの設定はそのままでは機能しません。

これを試してみると:

SHtml.fileUpload(f => fileHolder = Box !! f))

これBox[FileParamHolder]により、コードをコンパイルできるようになります。

于 2012-12-25T14:29:16.037 に答える