【问题标题】:Grails: Add XML node as last web.xml node in plugin's doWithWebDescriptorGrails:在插件的 doWithWebDescriptor 中添加 XML 节点作为最后一个 web.xml 节点
【发布时间】:2014-04-28 18:18:30
【问题描述】:

我的插件定义文件中有以下代码:

def doWithWebDescriptor = { xml ->
  // Implement additions to web.xml (optional), this event occurs before
  xml.'welcome-file-list'[0] + {
    'security-constraint'({
      'web-resource-collection'({
        'web-resource-name'('Java Melody Monitoring')
        'url-pattern'('/monitoring')
      })
      'auth-constraint'({
        'role-name'('melody')
      })
    })

    'login-config'({
      'auth-method'('BASIC')
      'realm-name'('Restricted Area')
    })
  }
}

这会将“security-constraint”和“login-config”节点添加到 web.xml 文件中,但是,我目前已将其硬编码为添加到“welcome-file-list”节点之后。我想不通的是如何简单地告诉它添加这些节点作为“web-app”根节点中的最后一个节点。

【问题讨论】:

    标签: xml grails nodes web.xml


    【解决方案1】:

    抓取孩子,在最后一个孩子之后追加。

    xml.children()[-1] + {
        'security-constraint'({
          'web-resource-collection'({
            'web-resource-name'('Java Melody Monitoring')
            'url-pattern'('/monitoring')
          })
          'auth-constraint'({
            'role-name'('melody')
          })
        })
    
        'login-config'({
          'auth-method'('BASIC')
          'realm-name'('Restricted Area')
        })
      }
    

    【讨论】:

      【解决方案2】:

      虽然 dmahapatro 的回答会奏效,但我相信 appendNode 是最清晰的解决方法。

      这样的事情会起作用:

      xml.appendNode {
          'security-constraint'({       
              'web-resource-collection'({         
                  'web-resource-name'('Java Melody Monitoring')         
                  'url-pattern'('/monitoring')       
              })       
              'auth-constraint'({         
                  'role-name'('melody')       
              })     
          })      
          'login-config'({       
              'auth-method'('BASIC')       
              'realm-name'('Restricted Area')     
          })
      }
      

      【讨论】:

      • 能否请您添加appendNode 将闭包作为参数的链接?
      • Closure 不是Object
      • 这个接受的答案使用类似的语法:stackoverflow.com/questions/19026002/…
      • 它是否适用于上述实现?是的,闭包是一个对象。 :)
      • 我测试了我在 Groovy Web 控制台上发布的确切代码,所以我要说它有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多