【问题标题】:How to save a Text property using Clojure and appengine-magic如何使用 Clojure 和 appengine-magic 保存 Text 属性
【发布时间】:2011-04-02 17:59:47
【问题描述】:

表单的body 字段可能包含长文本,因此默认的 String 属性不会这样做。

寻找如何使数据存储区使用文本(这不是我从 Python 版本中回忆的实体定义的一部分),我在 ackbar 博客的源代码中找到了这个:

(ns <snip>
  (:import (com.google.appengine.api.datastore
            EntityNotFoundException Text)))
<snip>
(ds/save! (Post. url title (Text. body) ts in-feed? category))

但如果我这样做,我会得到:“java.lang.RuntimeException: java.lang.IllegalArgumentException: Don't know how to create ISeq from: com.google.appengine.api.datastore.Text”

(一个显着的区别是我正在查看的 ackbar 使用 appengine-magic 0.3.2。)

我也尝试了as-text,正如https://github.com/gcv/appengine-magic#readme 中简要提到的那样,但其中的(as-text body) 会导致与上述相同的错误消息。


编辑:原来问题实际上不是将 Text 属性放入商店,而是在检索它时理解它。我的提交处理程序触发保存,然后重新加载表单页面,我没有想到这一点。抱歉打扰了。

在不打嗝的情况下获取价值的方法是(.getValue body)

【问题讨论】:

  • 我的想法是你发布一个真正的堆栈跟踪。该异常强烈表明您正在将 Text 对象传递给一些需要 seq 的 clojure 函数,但没有实际的堆栈跟踪,也不知道 GAE 是如何工作的,我不知道去哪里找。
  • 你是如何使用这个功能的?我试过(ds/save! (Article. "foo" "bar" (ds/as-text "baz") 1 2)) 似乎工作正常。

标签: google-app-engine web-applications clojure google-cloud-datastore appengine-magic


【解决方案1】:

来自 appengine-magic 文档:

as-text:将字符串转换为 com.google.appengine.api.datastore.Text。

所以你应该将java.lang.String 传递给as-text

(as-text body)

【讨论】:

  • 这就是我说我也尝试过 ds/as-text 时的意思,它确实导致“java.lang.RuntimeException: java.lang.IllegalArgumentException: Don't know how to create ISeq from : com.google.appengine.api.datastore.Text"
  • 我与type 确认bodyjava.lang.String
  • 好吧,对不起,我一开始不太明白你的帖子。您介意发布您的实际代码吗?因为上面给出的例子应该可以工作(如果我的眼睛没有坏的话)。
猜你喜欢
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2011-07-06
  • 2010-11-13
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多