WAFileMetadataLibrary可能存在的问题

时间:2013-06-29 13:57:36

标签: smalltalk pharo seaside

我正在使用WAFileMetadataLibrary,我发现了

可能存在的问题
addFileAt: aPath relativeToRootDirectory: relativeRootDirectory.

我遇到的问题是一些带有(../ img / someImage.png)的css越来越指向

http://localhost:8080/files/img/someImage.png

而不是

http://localhost:8080/files/MyWAFileMetadataLibrary/img/someImage.png

进一步查看代码后我发现在addFileAt:aPath relativeToRootDirectory:relativeRootDirectory。

有一行

relativeFilepath := relativeFilepath replaceAll: pathSeparator  with:'/'. 

在这里,我发现'\'( im in windows )的路径不会被'/'替换。

所以我有了覆盖并将行更改为

relativeFilepath := relativeFilepath replaceAll: pathSeparator first with: $/.

对我有用,来自css的调用指向

http://localhost:8080/files/MyWAFileMetadataLibrary/img/someImage.png

社区中的任何人都可以验证它并让我知道我是不是要进一步搞乱,如果可以的话,请问你能否正确地修改WAFileMetadaLibrary?

1 个答案:

答案 0 :(得分:2)

我刚检查了Seaside 30和Seaside 3.1(使用Pharo CI服务器https://ci.inria.fr/pharo-contribution/)。

在Seaside 3.1中,代码是

addFileAt: aPath relativeToRootDirectory: relativeRootDirectory
| relativeFilepath pathSeparator |
relativeFilepath := aPath allButFirst: relativeRootDirectory size.
pathSeparator := GRPlatform current pathSeparator.

(relativeFilepath first = pathSeparator first) 
    ifTrue: [ relativeFilepath := relativeFilepath allButFirst ].

relativeFilepath := relativeFilepath replaceAll: pathSeparator first with: $/. 

self addFileNamed: relativeFilepath
    contents: (GRPlatform current 
            contentsOfFile: aPath
            binary: (self isBinaryAt: aPath))

你的修复看起来不错。

确实在Seaside 30

 relativeFilepath := relativeFilepath replaceAll: pathSeparator first with: '/'. 

所以你可能发现了一个错误。