Pragmas 的工作方式似乎与我在 Seaside 中的预期不同
Pragmas seem to work differently than I expect in Seaside
对 Pharo/Seaside 相当陌生,我已经有很长时间没有使用 Smalltalk 了。我正在尝试制作 RESTful 服务,但无法按照我认为应该的方式使用编译指示让它工作。即这是我在 class TeamMembers 中的列表方法,它是 WARestfulHandler.
的直接子 class
list
<get>
^ String streamContents: [ :stream |
self teamMembers do: [ :each |
stream nextPutAll: each ; crlf ] ]
完成所有正确的注册后
WAAdmin 注册:TeamMembers 位于:'team-members'
当我在浏览器中执行时 (http://localhost:8080/team-members) 我收到消息
/找不到团队成员
但如果我执行 (http://localhost:8080/team-members/list),它会按预期工作。
这似乎与 http://book.seaside.st/book/advanced/restful/getting-started/define-handler 中的文档相矛盾。
如果我覆盖 TeamMembers>>
createRoutes
| route |
route := WARoute get: '/listJson' selector: #listJson.
^OrderedCollection new
"GET"
add: route;
add: (WARoute get: #list);
yourself
然后我在浏览到 (http://localhost:8080/team-members)
时得到了预期的行为
但是,要获得 Json 输出,我仍然必须使用 (http://localhost:8080/team-members/listJson)。
我可能错过了一些非常简单的事情,但我们将不胜感激。
将 Pharo6.0-64.image 与 Seaside 一起使用,这就是 Seaside 的安装方式。
Metacello new
configuration:'Seaside3';
repository:
'http://www.smalltalkhub.com/mc/Seaside/MetacelloConfigurations/main';
version: #stable;
load.
Gofer new
squeaksource: 'Seaside30Addons';
package: 'Seaside-REST-Core';
package: 'Seaside-Pharo-REST-Core';
package: 'Seaside-Tests-REST-Core';
load.
谢谢
看来在list方法中再添加一个pragma就解决了问题
list
<get>
<path: '/'>
^ String streamContents: [ :stream |
self teamMembers do: [ :each |
stream nextPutAll: each ; crlf ] ]
您需要添加 <path: '/'>
编译指示,因为您有不止一种带有 <get>
编译指示且没有参数的方法。
对 Pharo/Seaside 相当陌生,我已经有很长时间没有使用 Smalltalk 了。我正在尝试制作 RESTful 服务,但无法按照我认为应该的方式使用编译指示让它工作。即这是我在 class TeamMembers 中的列表方法,它是 WARestfulHandler.
的直接子 classlist
<get>
^ String streamContents: [ :stream |
self teamMembers do: [ :each |
stream nextPutAll: each ; crlf ] ]
完成所有正确的注册后 WAAdmin 注册:TeamMembers 位于:'team-members' 当我在浏览器中执行时 (http://localhost:8080/team-members) 我收到消息
/找不到团队成员
但如果我执行 (http://localhost:8080/team-members/list),它会按预期工作。
这似乎与 http://book.seaside.st/book/advanced/restful/getting-started/define-handler 中的文档相矛盾。
如果我覆盖 TeamMembers>>
createRoutes
| route |
route := WARoute get: '/listJson' selector: #listJson.
^OrderedCollection new
"GET"
add: route;
add: (WARoute get: #list);
yourself
然后我在浏览到 (http://localhost:8080/team-members)
时得到了预期的行为但是,要获得 Json 输出,我仍然必须使用 (http://localhost:8080/team-members/listJson)。
我可能错过了一些非常简单的事情,但我们将不胜感激。
将 Pharo6.0-64.image 与 Seaside 一起使用,这就是 Seaside 的安装方式。
Metacello new
configuration:'Seaside3';
repository:
'http://www.smalltalkhub.com/mc/Seaside/MetacelloConfigurations/main';
version: #stable;
load.
Gofer new
squeaksource: 'Seaside30Addons';
package: 'Seaside-REST-Core';
package: 'Seaside-Pharo-REST-Core';
package: 'Seaside-Tests-REST-Core';
load.
谢谢
看来在list方法中再添加一个pragma就解决了问题
list
<get>
<path: '/'>
^ String streamContents: [ :stream |
self teamMembers do: [ :each |
stream nextPutAll: each ; crlf ] ]
您需要添加 <path: '/'>
编译指示,因为您有不止一种带有 <get>
编译指示且没有参数的方法。