2014-02-10 42 views
3

我最近沒有使用Velocity,但是我確定用於工作的某些東西現在不起作用 - 唯一的區別是我可以想到自從我最後一次使用它,現在是我們從v1.6.4升級到v1.7。

在我們的Java代碼中,我們在腳本上下文中添加了一個值,該值是一個逗號分隔的字符串;

context.put("value", "'a','b','c'") 

(這個例子已經簡化了)。

在我的速度代碼,如果我說的話;

$value -- it prints 'a','b','c' 
$value.split(",")[0] -- it prints 'a' 
$value.split(",").size() -- it prints 3 

但是,如果我試着說

#foreach ($val in $value.split(",")) 
    -- $val 
#end 

它不顯示任何信息。事實上,如果我說

#set ($val = $value.split(",")) 
#if (! $val) 
    -- print null message here 
#end 

它進入if塊並說$ val爲空。

在一個點上,我想我會是聰明,沿以下

#set ($count = $value.split(",").size()) 
#foreach ($item in [0..$count]) 
    -- reference $value.split(",")[$item] 
#end 

行做的東西,但它根本不希望使用的從$值派生的任何RHS。

最後,如果我做了以下;

#set ($value = "'a','b','c'") 
#foreach ($val in $value.split(",")) 
    -- Write out $val 
#end 

它的工作原理與預期一致。有一些關於將它作爲一個變量傳遞給引擎的問題,阻止它正確處理。

任何人都知道爲什麼這不工作?任何可能的解決方法?

在此先感謝,

p.s.

+0

你肯定有像「有一個在變量名拼寫錯誤」沒有簡單的答案?它應該確實有效,它對我來說是一個簡單的測試。 –

+0

您的陳述「有些東西會將它作爲一個變量傳遞給引擎,導致它無法正確處理。」似乎是一個可能的解釋,因爲我不能讓它工作,除非我在'in'的右邊做了'split'。 –

回答

0

你需要把一張表的上下文的foreach的工作,如:

context.put("value", Arrays.asList("a", "b", "c")); 
+0

謝謝,但不是我正在尋找的答案。如果這是嚴格正確的,最後一個例子也不會工作,但它確實...... split()返回一個String數組,它應該是可迭代的 - 網絡上有無數的例子,但我無法確定是否有他們完成了v1.7 ... – user1251193

相關問題