You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by William Lopes <wi...@gmail.com> on 2012/08/13 14:42:03 UTC

Autocomplete with two parameters

Hi guys.

I'm already for done my project, but now the things are too ugly.

So, I need make an autocomplete, the default I already did, but don't work
of the way that I need.

I have a form dynamic, so all my fields are dynamics, with it I can't use
the default autocomplete, because it don't distinguish which field is and
so I can't prepare the autocomplete correctly.

My .tml:

> <t:form t:type="form" t:id="AtualizarForm">
> <t:errors t:banner="${message:default-banner}"/>
> <table id="usuarioFormTable">
> <tr>
> <t:loop source="listAtributoGeneric" value="currentAtributoGeneric"
> encoder="encoder">
> <t:submitNotifier>
> <tr>
> <td align="right">${currentAtributoGeneric.name}:</td>
> <td width="10"/>
> <td align="left">
> <t:delegate to="activeBlock"/>
> </td>
> </tr>
> </t:submitNotifier>
> </t:loop>
> </tr>
> </table>
>
> <table>
> <tr><td colspan="3" align="center">
> <br />
> <input type="submit" t:type="submit" t:id="salvaButton"
> value="${message:salvar-label}" class="buttonSubmit" />
> </td></tr>
> </table>
>
> </t:form>
>
> <t:block id="stringBlock">
> <t:textfield value="currentAtributoGeneric.value"
> label="${currentAtributoGeneric.name}" translate="string"
>  validate="maxLength=255" t:id="stringGeneric" size="50"/>
> </t:block>
> <t:block id="stringLargeBlock">
> <t:textarea value="currentAtributoGeneric.value"
> label="${currentAtributoGeneric.name}" translate="string"
> validate="maxLength=2048" t:id="stringLargeGeneric" rows="3" cols="49"/>
> </t:block>
> <t:block id="dateBlock">
> <t:datefield value="currentAtributoGeneric.value" format="dd/MM/yyyy"
> label="${currentAtributoGeneric.name}"
>  validate="maxLength=10,regexp" t:id="dateGeneric"
> onkeypress="javascript:formataData(this.value, this.id, event);"
> size="12" />
> </t:block>
> <t:block id="numericBlock">
> <t:textfield value="currentAtributoGeneric.value"
> label="${currentAtributoGeneric.name}" translate="string"
>  validate="maxLength=20,regexp" t:id="numericGeneric" size="20"/>
> </t:block>
> <t:block id="numericDecimalBlock">
> <t:textfield value="valorDecimal" label="${currentAtributoGeneric.name}"
> translate="string"
>  validate="maxLength=18,regexp" t:id="numericDecimalGeneric"
> onkeypress="javascript:formataDecimal(this, 17, event, 2)" size="20"/>
> </t:block>
> <t:block id="modeloDadosBlock">
> <t:textfield value="currentAtributoGeneric.value"
> label="${currentAtributoGeneric.name}" translate="string"
>  validate="maxLength=50" t:id="modeloDadosGeneric" t:mixins="Autocomplete"
> size="50"/>
> </t:block>



.java:

> List<String> onProvideCompletionsFromModeloDadosGeneric(String partial) {

List<Material> matches = null;

try {

matches = service.getAllByFiltroTextoAndModeloDados(partial, modeloDados);

} catch (Exception e) {

System.out.println("Erro em " + this);

e.printStackTrace();

}


> List<String> result = new ArrayList<String>();


> for (Material i : matches) {

for(ValorAtributo j : i.getValoresAtributo()) {

if((j.getAtributo().getTipoAtributo() == TipoAtributo.TEXTO_GRANDE

|| j.getAtributo().getTipoAtributo() == TipoAtributo.TEXTO_PEQUENO)

&& j.getValor().toLowerCase().contains(partial.toLowerCase())) {

result.add(i.getId() + " - " + j.getValor());

break;

}

}

}


> return result;

}


How you can see, in *matches =
service.getAllByFiltroTextoAndModeloDados(partial, modeloDados);* , I need
of a parameter for can define which modeloDados is.

How I could do it? (following the default of the Tapestry)

Thanks!

Re: Autocomplete with two parameters

Posted by William Lopes <wi...@gmail.com>.
I achieved, but I don't did with autocomplete, I chose for the input select
with SelectModel. Anyway, thank you, in the future will be useful.

Hugs.

2012/8/13 Robert Zeigler <ro...@roxanemy.com>

> Under the hood, tapestry is using the Ajax.Autocompleter from
> Scriptaculous (at least for now). One of the parameters to the javascript
> is "parameters" (see: http://script.aculo.us/docs/Ajax.Autocompleter.html).
> Tapestry doesn't allow you set this by default, BUT, you could extend the
> autocomplete mixin and override the "configure" method (the superclass
> implementation is empty) to add the value to the configuration.
>
> Then in your custom "configure" method, you could add whatever you wanted.
> For instance, you could do something like pass the current generic
> attribute, or generic attribute name, or whatever you need, as a parameter.
> Then in your "onProvideCompletions" method, you can grab the parameter from
> an injected Request object.
>
> Robert
>
> On Aug 13, 2012, at 8/136:13 PM , William Lopes wrote:
>
> > If someone to have some other idea that can to solve, I'm ready to
> listen.
> >
> > Thanks.
> >
> > 2012/8/13 William Lopes <wi...@gmail.com>
> >
> >> Hi guys.
> >>
> >> I'm already for done my project, but now the things are too ugly.
> >>
> >> So, I need make an autocomplete, the default I already did, but don't
> work
> >> of the way that I need.
> >>
> >> I have a form dynamic, so all my fields are dynamics, with it I can't
> use
> >> the default autocomplete, because it don't distinguish which field is
> and
> >> so I can't prepare the autocomplete correctly.
> >>
> >> My .tml:
> >>
> >>> <t:form t:type="form" t:id="AtualizarForm">
> >>> <t:errors t:banner="${message:default-banner}"/>
> >>> <table id="usuarioFormTable">
> >>> <tr>
> >>> <t:loop source="listAtributoGeneric" value="currentAtributoGeneric"
> >>> encoder="encoder">
> >>> <t:submitNotifier>
> >>> <tr>
> >>> <td align="right">${currentAtributoGeneric.name}:</td>
> >>> <td width="10"/>
> >>> <td align="left">
> >>> <t:delegate to="activeBlock"/>
> >>> </td>
> >>> </tr>
> >>> </t:submitNotifier>
> >>> </t:loop>
> >>> </tr>
> >>> </table>
> >>>
> >>> <table>
> >>> <tr><td colspan="3" align="center">
> >>> <br />
> >>> <input type="submit" t:type="submit" t:id="salvaButton"
> >>> value="${message:salvar-label}" class="buttonSubmit" />
> >>> </td></tr>
> >>> </table>
> >>>
> >>> </t:form>
> >>>
> >>> <t:block id="stringBlock">
> >>> <t:textfield value="currentAtributoGeneric.value"
> >>> label="${currentAtributoGeneric.name}" translate="string"
> >>> validate="maxLength=255" t:id="stringGeneric" size="50"/>
> >>> </t:block>
> >>> <t:block id="stringLargeBlock">
> >>> <t:textarea value="currentAtributoGeneric.value"
> >>> label="${currentAtributoGeneric.name}" translate="string"
> >>> validate="maxLength=2048" t:id="stringLargeGeneric" rows="3"
> cols="49"/>
> >>> </t:block>
> >>> <t:block id="dateBlock">
> >>> <t:datefield value="currentAtributoGeneric.value" format="dd/MM/yyyy"
> >>> label="${currentAtributoGeneric.name}"
> >>> validate="maxLength=10,regexp" t:id="dateGeneric"
> >>> onkeypress="javascript:formataData(this.value, this.id, event);"
> >>> size="12" />
> >>> </t:block>
> >>> <t:block id="numericBlock">
> >>> <t:textfield value="currentAtributoGeneric.value"
> >>> label="${currentAtributoGeneric.name}" translate="string"
> >>> validate="maxLength=20,regexp" t:id="numericGeneric" size="20"/>
> >>> </t:block>
> >>> <t:block id="numericDecimalBlock">
> >>> <t:textfield value="valorDecimal"
> label="${currentAtributoGeneric.name}"
> >>> translate="string"
> >>> validate="maxLength=18,regexp" t:id="numericDecimalGeneric"
> >>> onkeypress="javascript:formataDecimal(this, 17, event, 2)" size="20"/>
> >>> </t:block>
> >>> <t:block id="modeloDadosBlock">
> >>> <t:textfield value="currentAtributoGeneric.value"
> >>> label="${currentAtributoGeneric.name}" translate="string"
> >>> validate="maxLength=50" t:id="modeloDadosGeneric"
> >>> t:mixins="Autocomplete" size="50"/>
> >>> </t:block>
> >>
> >>
> >>
> >> .java:
> >>
> >>> List<String> onProvideCompletionsFromModeloDadosGeneric(String
> partial) {
> >>
> >> List<Material> matches = null;
> >>
> >> try {
> >>
> >> matches = service.getAllByFiltroTextoAndModeloDados(partial,
> >>> modeloDados);
> >>
> >> } catch (Exception e) {
> >>
> >> System.out.println("Erro em " + this);
> >>
> >> e.printStackTrace();
> >>
> >> }
> >>
> >>
> >>> List<String> result = new ArrayList<String>();
> >>
> >>
> >>> for (Material i : matches) {
> >>
> >> for(ValorAtributo j : i.getValoresAtributo()) {
> >>
> >> if((j.getAtributo().getTipoAtributo() == TipoAtributo.TEXTO_GRANDE
> >>
> >> || j.getAtributo().getTipoAtributo() == TipoAtributo.TEXTO_PEQUENO)
> >>
> >> && j.getValor().toLowerCase().contains(partial.toLowerCase())) {
> >>
> >> result.add(i.getId() + " - " + j.getValor());
> >>
> >> break;
> >>
> >> }
> >>
> >> }
> >>
> >> }
> >>
> >>
> >>> return result;
> >>
> >> }
> >>
> >>
> >> How you can see, in *matches =
> >> service.getAllByFiltroTextoAndModeloDados(partial, modeloDados);* , I
> >> need of a parameter for can define which modeloDados is.
> >>
> >> How I could do it? (following the default of the Tapestry)
> >>
> >> Thanks!
> >>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>

Re: Autocomplete with two parameters

Posted by Robert Zeigler <ro...@roxanemy.com>.
Under the hood, tapestry is using the Ajax.Autocompleter from Scriptaculous (at least for now). One of the parameters to the javascript is "parameters" (see: http://script.aculo.us/docs/Ajax.Autocompleter.html). Tapestry doesn't allow you set this by default, BUT, you could extend the autocomplete mixin and override the "configure" method (the superclass implementation is empty) to add the value to the configuration.

Then in your custom "configure" method, you could add whatever you wanted. For instance, you could do something like pass the current generic attribute, or generic attribute name, or whatever you need, as a parameter. Then in your "onProvideCompletions" method, you can grab the parameter from an injected Request object.

Robert

On Aug 13, 2012, at 8/136:13 PM , William Lopes wrote:

> If someone to have some other idea that can to solve, I'm ready to listen.
> 
> Thanks.
> 
> 2012/8/13 William Lopes <wi...@gmail.com>
> 
>> Hi guys.
>> 
>> I'm already for done my project, but now the things are too ugly.
>> 
>> So, I need make an autocomplete, the default I already did, but don't work
>> of the way that I need.
>> 
>> I have a form dynamic, so all my fields are dynamics, with it I can't use
>> the default autocomplete, because it don't distinguish which field is and
>> so I can't prepare the autocomplete correctly.
>> 
>> My .tml:
>> 
>>> <t:form t:type="form" t:id="AtualizarForm">
>>> <t:errors t:banner="${message:default-banner}"/>
>>> <table id="usuarioFormTable">
>>> <tr>
>>> <t:loop source="listAtributoGeneric" value="currentAtributoGeneric"
>>> encoder="encoder">
>>> <t:submitNotifier>
>>> <tr>
>>> <td align="right">${currentAtributoGeneric.name}:</td>
>>> <td width="10"/>
>>> <td align="left">
>>> <t:delegate to="activeBlock"/>
>>> </td>
>>> </tr>
>>> </t:submitNotifier>
>>> </t:loop>
>>> </tr>
>>> </table>
>>> 
>>> <table>
>>> <tr><td colspan="3" align="center">
>>> <br />
>>> <input type="submit" t:type="submit" t:id="salvaButton"
>>> value="${message:salvar-label}" class="buttonSubmit" />
>>> </td></tr>
>>> </table>
>>> 
>>> </t:form>
>>> 
>>> <t:block id="stringBlock">
>>> <t:textfield value="currentAtributoGeneric.value"
>>> label="${currentAtributoGeneric.name}" translate="string"
>>> validate="maxLength=255" t:id="stringGeneric" size="50"/>
>>> </t:block>
>>> <t:block id="stringLargeBlock">
>>> <t:textarea value="currentAtributoGeneric.value"
>>> label="${currentAtributoGeneric.name}" translate="string"
>>> validate="maxLength=2048" t:id="stringLargeGeneric" rows="3" cols="49"/>
>>> </t:block>
>>> <t:block id="dateBlock">
>>> <t:datefield value="currentAtributoGeneric.value" format="dd/MM/yyyy"
>>> label="${currentAtributoGeneric.name}"
>>> validate="maxLength=10,regexp" t:id="dateGeneric"
>>> onkeypress="javascript:formataData(this.value, this.id, event);"
>>> size="12" />
>>> </t:block>
>>> <t:block id="numericBlock">
>>> <t:textfield value="currentAtributoGeneric.value"
>>> label="${currentAtributoGeneric.name}" translate="string"
>>> validate="maxLength=20,regexp" t:id="numericGeneric" size="20"/>
>>> </t:block>
>>> <t:block id="numericDecimalBlock">
>>> <t:textfield value="valorDecimal" label="${currentAtributoGeneric.name}"
>>> translate="string"
>>> validate="maxLength=18,regexp" t:id="numericDecimalGeneric"
>>> onkeypress="javascript:formataDecimal(this, 17, event, 2)" size="20"/>
>>> </t:block>
>>> <t:block id="modeloDadosBlock">
>>> <t:textfield value="currentAtributoGeneric.value"
>>> label="${currentAtributoGeneric.name}" translate="string"
>>> validate="maxLength=50" t:id="modeloDadosGeneric"
>>> t:mixins="Autocomplete" size="50"/>
>>> </t:block>
>> 
>> 
>> 
>> .java:
>> 
>>> List<String> onProvideCompletionsFromModeloDadosGeneric(String partial) {
>> 
>> List<Material> matches = null;
>> 
>> try {
>> 
>> matches = service.getAllByFiltroTextoAndModeloDados(partial,
>>> modeloDados);
>> 
>> } catch (Exception e) {
>> 
>> System.out.println("Erro em " + this);
>> 
>> e.printStackTrace();
>> 
>> }
>> 
>> 
>>> List<String> result = new ArrayList<String>();
>> 
>> 
>>> for (Material i : matches) {
>> 
>> for(ValorAtributo j : i.getValoresAtributo()) {
>> 
>> if((j.getAtributo().getTipoAtributo() == TipoAtributo.TEXTO_GRANDE
>> 
>> || j.getAtributo().getTipoAtributo() == TipoAtributo.TEXTO_PEQUENO)
>> 
>> && j.getValor().toLowerCase().contains(partial.toLowerCase())) {
>> 
>> result.add(i.getId() + " - " + j.getValor());
>> 
>> break;
>> 
>> }
>> 
>> }
>> 
>> }
>> 
>> 
>>> return result;
>> 
>> }
>> 
>> 
>> How you can see, in *matches =
>> service.getAllByFiltroTextoAndModeloDados(partial, modeloDados);* , I
>> need of a parameter for can define which modeloDados is.
>> 
>> How I could do it? (following the default of the Tapestry)
>> 
>> Thanks!
>> 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: Autocomplete with two parameters

Posted by William Lopes <wi...@gmail.com>.
If someone to have some other idea that can to solve, I'm ready to listen.

Thanks.

2012/8/13 William Lopes <wi...@gmail.com>

> Hi guys.
>
> I'm already for done my project, but now the things are too ugly.
>
> So, I need make an autocomplete, the default I already did, but don't work
> of the way that I need.
>
> I have a form dynamic, so all my fields are dynamics, with it I can't use
> the default autocomplete, because it don't distinguish which field is and
> so I can't prepare the autocomplete correctly.
>
> My .tml:
>
>> <t:form t:type="form" t:id="AtualizarForm">
>>  <t:errors t:banner="${message:default-banner}"/>
>> <table id="usuarioFormTable">
>>  <tr>
>> <t:loop source="listAtributoGeneric" value="currentAtributoGeneric"
>> encoder="encoder">
>>  <t:submitNotifier>
>> <tr>
>> <td align="right">${currentAtributoGeneric.name}:</td>
>>  <td width="10"/>
>> <td align="left">
>> <t:delegate to="activeBlock"/>
>>  </td>
>> </tr>
>> </t:submitNotifier>
>>  </t:loop>
>> </tr>
>> </table>
>>
>> <table>
>> <tr><td colspan="3" align="center">
>>  <br />
>> <input type="submit" t:type="submit" t:id="salvaButton"
>> value="${message:salvar-label}" class="buttonSubmit" />
>>  </td></tr>
>> </table>
>>
>>  </t:form>
>>
>> <t:block id="stringBlock">
>>  <t:textfield value="currentAtributoGeneric.value"
>> label="${currentAtributoGeneric.name}" translate="string"
>>  validate="maxLength=255" t:id="stringGeneric" size="50"/>
>>  </t:block>
>> <t:block id="stringLargeBlock">
>> <t:textarea value="currentAtributoGeneric.value"
>> label="${currentAtributoGeneric.name}" translate="string"
>>  validate="maxLength=2048" t:id="stringLargeGeneric" rows="3" cols="49"/>
>> </t:block>
>>  <t:block id="dateBlock">
>> <t:datefield value="currentAtributoGeneric.value" format="dd/MM/yyyy"
>> label="${currentAtributoGeneric.name}"
>>  validate="maxLength=10,regexp" t:id="dateGeneric"
>> onkeypress="javascript:formataData(this.value, this.id, event);"
>> size="12" />
>>  </t:block>
>> <t:block id="numericBlock">
>> <t:textfield value="currentAtributoGeneric.value"
>> label="${currentAtributoGeneric.name}" translate="string"
>>  validate="maxLength=20,regexp" t:id="numericGeneric" size="20"/>
>> </t:block>
>>  <t:block id="numericDecimalBlock">
>> <t:textfield value="valorDecimal" label="${currentAtributoGeneric.name}"
>> translate="string"
>>  validate="maxLength=18,regexp" t:id="numericDecimalGeneric"
>> onkeypress="javascript:formataDecimal(this, 17, event, 2)" size="20"/>
>>  </t:block>
>> <t:block id="modeloDadosBlock">
>> <t:textfield value="currentAtributoGeneric.value"
>> label="${currentAtributoGeneric.name}" translate="string"
>>  validate="maxLength=50" t:id="modeloDadosGeneric"
>> t:mixins="Autocomplete" size="50"/>
>> </t:block>
>
>
>
> .java:
>
>> List<String> onProvideCompletionsFromModeloDadosGeneric(String partial) {
>
>  List<Material> matches = null;
>
>  try {
>
>  matches = service.getAllByFiltroTextoAndModeloDados(partial,
>> modeloDados);
>
>  } catch (Exception e) {
>
>  System.out.println("Erro em " + this);
>
>  e.printStackTrace();
>
>  }
>
>
>>  List<String> result = new ArrayList<String>();
>
>
>> for (Material i : matches) {
>
>  for(ValorAtributo j : i.getValoresAtributo()) {
>
>  if((j.getAtributo().getTipoAtributo() == TipoAtributo.TEXTO_GRANDE
>
>  || j.getAtributo().getTipoAtributo() == TipoAtributo.TEXTO_PEQUENO)
>
>  && j.getValor().toLowerCase().contains(partial.toLowerCase())) {
>
>  result.add(i.getId() + " - " + j.getValor());
>
>  break;
>
>  }
>
>  }
>
>  }
>
>
>>  return result;
>
>  }
>
>
> How you can see, in *matches =
> service.getAllByFiltroTextoAndModeloDados(partial, modeloDados);* , I
> need of a parameter for can define which modeloDados is.
>
> How I could do it? (following the default of the Tapestry)
>
> Thanks!
>