2010-06-02 26 views
2

如果消息屬性代碼確實存在或不存在,我想分支。如果message.properties代碼存在,我該如何分支

<g:if test="${message(code: 'default.code.foo')}"> 
    true 
</g:if><g:else> 
false 
</g:else> 

應該回答true如果有一個名爲default.code.foofalse如果沒有消息屬性。

它失敗了,因爲它在沒有屬性的情況下回答代碼。

回答

7

你能不能提供一個默認的,這是一個空字符串?

<g:if test="${message(code: 'default.code.foo', default:'')}"> 
    true 
</g:if><g:else> 
false 
</g:else> 

這將等同於假Groovy's truth

+0

+1爲巧妙 – 2010-06-02 13:44:14

+0

我相信你也可以做類似 「$ {g.message(code:'specific.code.foo',default:''}?:g.message(code:'default.code .foo'}「 作爲替代。 – 2014-03-31 16:43:56

2

那麼你爲什麼不測試返回的字符串是否是代碼本身?

<g:if test="${message(code: 'default.code.foo') == 'default.code.foo'}"> 
    true 
</g:if><g:else> 
false 
</g:else> 

如果你需要在幾個地方這樣做,並希望使代碼更簡潔一點,那麼把這個邏輯放在標籤庫中。

class MsgTagLib { 
    static namespace = 'msg' 

    def messageSource 

    private static final NO_ARGS = [].toArray(); 

    def exists = {attrs -> 

     try { 
      messageSource.getMessage(attrs.code, NO_ARGS, Locale.default) 
      out << true 
     } catch (NoSuchMessageException e) { 
      out << false     
     } 
    } 
} 

然後,您可以使用調用這個在GSP:

<msg:exists code="default.code.foo"/> 

注意

  1. 上面的標記庫是100%的未經檢驗的,當心!
  2. exists標籤在它上面的表格不支持參數的消息
+0

下,有時是遠遠容易看到的解決方案... :)確保解決它! – skurt 2010-06-02 13:34:54

相關問題