Dúvidas sobre Computação ?
Vamos tentar tirar dúvidas e trocar conhecimento com todos, sobre qualquer assunto relacionado a computação

sábado, 15 de outubro de 2011

Error executing script RunApp: : Error starting Sun's native2ascii:

Error executing script RunApp: : Error starting Sun's native2ascii:
gant.TargetExecutionException: : Error starting Sun's native2ascii:
at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:331)
at gant.Gant$_dispatch_closure6.doCall(Gant.groovy:334)
at gant.Gant$_dispatch_closure6.doCall(Gant.groovy)
at gant.Gant.withBuildListeners(Gant.groovy:344)
at gant.Gant.this$2$withBuildListeners(Gant.groovy)
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:334)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.processTargets(Gant.groovy:495)
at gant.Gant.processTargets(Gant.groovy:480)
Caused by: : Error starting Sun's native2ascii:
at org.apache.tools.ant.taskdefs.optional.native2ascii.SunNative2Ascii.run(SunNative2Ascii.java:67)
at org.apache.tools.ant.taskdefs.optional.native2ascii.DefaultNative2Ascii.convert(DefaultNative2Ascii.java:54)
at org.apache.tools.ant.taskdefs.optional.Native2Ascii.convert(Native2Ascii.java:268)
at org.apache.tools.ant.taskdefs.optional.Native2Ascii.execute(Native2Ascii.java:227)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
at org.apache.tools.ant.Task.perform(Task.java:348)
at _GrailsPackage_groovy$_run_closure2_closure13.doCall(_GrailsPackage_groovy:108)
at _GrailsPackage_groovy$_run_closure2_closure13.doCall(_GrailsPackage_groovy)
at _GrailsSettings_groovy$_run_closure10.doCall(_GrailsSettings_groovy:274)
at _GrailsSettings_groovy$_run_closure10.call(_GrailsSettings_groovy)
at _GrailsPackage_groovy$_run_closure2.doCall(_GrailsPackage_groovy:107)
at RunApp$_run_closure1.doCall(RunApp:28)
at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:324)
... 10 more
Caused by: java.lang.ClassNotFoundException: sun.tools.native2ascii.Main
at org.codehaus.groovy.tools.RootLoader.findClass(RootLoader.java:156)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at org.codehaus.groovy.tools.RootLoader.loadClass(RootLoader.java:128)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:164)



__________________________________________________________

Para resolver este problema no STS(SpringSource tool suite) é preciso ajustar o jre do java na IDE, é necessário apontar para a pasta do JDK, por default vem apontando diretamente para a jre, mas deve ser alterado para apontar para a pasta do JDK. Feito isso é só executar(Run) novamente a aplicação.
Valeu!!
Até mais!!


João 3:16 - Porque Deus amou ao mundo de tal maneira que deu o seu Filho unigênito, para que todo o que nele crê não pereça, mas tenha a vida eterna.

sexta-feira, 14 de outubro de 2011

Solução para bind com date no grails, no uso de Jquery ui.

Como pode ser visto na documentação da tag datepicker do grails, ele gera os campos (day, month, year), hour e minute, para realizar diretamente o bind em um domain que possui um java.util.Date como propriedade. Ao usar a tag datepicker isso acontece muito bem, ocorre que não é visualmente agradável essa propriedade.
 

Visualmente o datepicker do jquery ui é uma maravilha, mas nem tudo é perfeito. O problema é que para usá-lo é necessário fazer pequenas adaptações (POG :D). Visto que ele gera uma string para o controller e assim fica complicado de trabalhar.




Concluindo, o ideal era que o datepicker do jquery ui fizesse o que a tag datepicker do grails faz. Então vamos gerar nossa própria tag que junte a beleza com a funcionalidade do bind automático. Para isso, crie uma tagLib no seu projeto e adicione o código uiDatePicker. Lembre que para que a tag funcione corretamente é necessário possuir o jquery e jquery ui instalados corretamente no projeto. Note que adicionei o mask também, mas se não o quiser pode remover o trecho do código que gera a mascara de data. O padrão regional do jquery ui datepicker pode ser encontrato aqui. Para usá-lo você deve baixar o pacote desejado, importar no projeto e passar no atributo regional da tagLib que criou. Verá que criei minha tagLib com o namespace iTag, isso não é uma obrigação, pode criar como quiser o deixar sem namespace definido. Por padrão do datepicker do jquery ui, deixar sem definição de regional, faz com que a linguagem escolhida seja inglês. Veja como definir para português do Brasil.




O resultado abaixo foi conseguido utilizando o regional pt-BR. Em seguida o resultado do código no firebug. Boa sorte !! xD


com pt-BR

resultado no firebug

Lembrando que essa não é a única solução. Se preferir é possível customizar uma classe que implemente a interface PropertyEditorRegistrar, responsável por realizar binds nas propriedades.  Acesso o blog Felipenasc, lá poderá ver detalhes dessa outra solução.


... 

def uiDatePicker = { attrs ->
  def name = attrs.name
  def id = attrs.id ?: onlyField(name)
  def clazz = attrs.class ?: ''
  def format = attrs.formatDate ?: 'dd/mm/yy'
        def formatJava = attrs.formatDateJava ?: 'dd/MM/yyyy'
        def regional = attrs.regional ?: ''
  def showButtonPanel = attrs.showButtonPanel
  def changeMonth = attrs.changeMonth
  def changeYear = attrs.changeYear
  def showWeek =  attrs.showWeek
  def firstDay = attrs.firstDay ?: 1
  def numberOfMonths = attrs.numberOfMonths ?: 3
  def maskFormat = attrs.maskFormat
  def minDate = attrs.minDate
        def value = attrs?.value

        def title = attrs.title ?: ''
        def onkeypress = attrs.onkeypress

  // field
  out << ""
  // date
  out << ""
  out << ""
  out << ""
  // time
  try{
            out << ""
            out << ""
        }catch (IllegalArgumentException e){
            out << ""
            out << ""
        }


        // script
  out << ""



 }
...