Jmesa

1- Datepicker In Jmesa / Datepicker pour les filtres  date dans un tableau jmesa

2-  Jmesa i18n internationalization / internalisation in  Struts

  

Datepicker In Jmesa / Mettre une Datepicker pour les filtres de type date dans un tableau jmesa

Détail :

JMesa est un tableau HTML dynamique qui  permet de filtrer, trier, pagines, exporter et éditer les données mais vous devez. jmesa est une API mûrement réfléchie qui est très facile à utiliser et peut être modifié pour vos propres besoins.

Dans la page JSP :


<jmesa:tableFacade
                id="worksheet"
                editable="false"
                items="${items}"
                maxRows="25"
                exportTypes=""
                maxRowsIncrements="25,50,100"
                stateAttr="restore"
                toolbar="com.xx.portal.util.
jmesa.CustomToolbar"
                filterMatcherMap="com.xx.portal.util.jmesa.PDADateFilterMatcherMap"
                var="pdaCycleInfo">
                ......

        <jmesa:htmlColumn property="importDate" title="Import Date"
            editable="false"  width="150px"        pattern="yyyy-MM-dd" cellEditor="org.jmesa.view.editor.DateCellEditor"
             filterEditor="com.xx.portal.util.jmesa.DatePickerFilterEditor"
        />

.............

public class PDADateFilterMatcherMap implements FilterMatcherMap
{

    public Map<MatcherKey, FilterMatcher> getFilterMatchers()
    {
        Map<MatcherKey, FilterMatcher> filterMatcherMap = new HashMap<MatcherKey, FilterMatcher>();
        filterMatcherMap.put(new MatcherKey(Date.class, "importDate"), new DateFilterMatcher("yyyy-MM-dd"));
        return filterMatcherMap;
    }
}
.............

public class DatePickerFilterEditor extends AbstractFilterEditor
{
    @Override
    public HtmlColumn getColumn()
    {
        return (HtmlColumn)super.getColumn();
    }

    public Object getValue()
    {
        HtmlBuilder html = new HtmlBuilder();

        Limit limit = getCoreContext().getLimit();
        HtmlColumn column = getColumn();
        String property = column.getProperty();
        Filter filter = limit.getFilterSet().getFilter(property);

        String filterValue = "";
        if (filter != null)
        {
            filterValue = filter.getValue();
        }

        html.div().styleClass("dynFilter");
        html.onclick("jQuery.jmesa.createDynDateFilter(this, '" + limit.getId() + "','" + column.getProperty() + "' ,"dd/MM/yyyy" ,"fr")");
        html.close();
        html.append(escapeHtml(filterValue));
        html.divEnd();

        return html.toString();
    }
}
--------------

Dans le fichier javascript jquery.jmesa.js , ajouter ce bout de code

createDynDateFilter : function(filter, id, property) {
    if (dynDateFilter) {
        return;
    }

    dynDateFilter = new classes.DynFilter(filter, id, property , format , local);

    var cell = $(filter);
    var width = cell.width();
    var originalValue = cell.text();

    /* Enforce the width with a style. */
    cell.width(width);
    cell.parent().width(width);
    cell.css('overflow', 'visible');

    cell.html('<div id="dynFilterDateDiv"><input id="dynFilterDateInput" name="filter" style="width:' + (width + 2) + 'px" value="" /></div>');

    var input = $('#dynFilterDateInput');
           $("#dynFilterDateInput").datepicker($.extend({}, $.datepicker.regional[local], {
                dateFormat: format
             }));
    input.val(originalValue);
    input.focus();

    $(input).keypress(function(event) {
        if (event.keyCode == 13) { /* Press the enter key. */
            var changedValue = input.val();
            cell.text('');
            cell.css('overflow', 'hidden');
            cell.text(changedValue);
            $.jmesa.addFilterToLimit(dynDateFilter.id, dynDateFilter.property, changedValue);
            $.jmesa.onInvokeAction(dynDateFilter.id, 'filter');
            dynDateFilter = null;
        }
    });

    $(input).change(function() {
        var changedValue = input.val();
        cell.text('');
        cell.css('overflow', 'hidden');
        cell.text(changedValue);
        $.jmesa.addFilterToLimit(dynDateFilter.id, dynDateFilter.property, changedValue);
        $.jmesa.onInvokeAction(dynDateFilter.id, 'filter');
        dynDateFilter = null;
    });


Jmesa i18n internationalization / internalisation in  Struts

 

Détail :

                   jmesa offre la possibilité d’internationaliser ses applications. 
 il faut créer une classe i18NHelper :

 public class i18NHelper {     private static MessageResources getMessageResources (HttpServletRequest request) {
       
        return (MessageResources) request.getAttribute (Globals.MESSAGES_KEY);
    }
    public static String getLocalizedMessage(Locale locale, String messageKey , MessageResources messageResources)throws Exception {
        if(locale == null) return messageKey;
   
        String localizedMessage = null;
       
        if(messageResources != null) {
                localizedMessage = messageResources.getMessage(
locale, messageKey);
        }
       
        if(localizedMessage == null) {
            localizedMessage = "N/A";
        }
       
        return localizedMessage;
    }
   
   
   
}


dans la page jsp  :


  <%@ page import="com.web.service.i18N.
i18NHelper"%>
<% MessageResources msgR = (MessageResources) getServletContext().
getAttribute(Globals.MESSAGES_KEY);%>

<bean:define id="nameBean" type="java.lang.String" value="<%=i18NHelper.
getLocalizedMessage((Locale)request.getSession().getAttribute(ISessionConstants.local), "application.name", msgR)%>" />


<jmesa:tableFacade

                id="worksheet"
                editable="false"
                items="${items}"
                maxRows="25"
                exportTypes=""
                maxRowsIncrements="25,50,100"
                stateAttr="restore"
                toolbar="com.web.service.
jmesa.CustomToolbar"
                filterMatcherMap="com.web.
service.jmesa.PDADateFilterMatcherMap"
                var="pdaCycleInfo">
               
    <jmesa:htmlColumn property="name" title="${nameBean}"
            editable="false"  width="150px" 
        />

 

Aucun commentaire:

Enregistrer un commentaire