package br.com.citframework.tld; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyTagSupport; public class GridControl extends BodyTagSupport{ /** * */ private static final long serialVersionUID = -7469224032227151783L; private String name; private String width; private String height; private String internalWidth; private String columnTitles; private String columnReferences; private String columnWidths; private String columnTypes; private String collectionCombos; private String collection; private String formName; private String numLinhas; public int doStartTag() throws JspException { StringBuilder strBuff = new StringBuilder(); String[] titulos; String[] widths; String[] types; int i; String valorDefault = " "; strBuff.append("<script>\n"); strBuff.append("var "+getName()+"_isMozilla = true;\n"); strBuff.append("var "+getName()+"_isIE = (navigator.userAgent.indexOf('MSIE') != -1);\n"); strBuff.append("if ("+getName()+"_isIE) "+getName()+"_isMozilla = false;\n"); strBuff.append("</script>\n"); strBuff.append("<div id='grid"+getName()+"' style='overflow:auto;position:absolute; width:"+getWidth()+"; height:"+getHeight()+"'>\n"); strBuff.append(" <input type='hidden' name='"+getName()+"controle' id='"+getName()+"controle' disabled>\n"); strBuff.append(" <input type='hidden' name='"+getName()+"numeroColuna' id='"+getName()+"numeroColuna' disabled>\n"); strBuff.append(" <input type='hidden' name='"+getName()+"numLinhas' id='"+getName()+"numLinhas' value='"+getNumLinhas()+"'>\n"); strBuff.append(" <table border=1 width='"+getInternalWidth()+"'>\n"); strBuff.append(" <tr>\n"); strBuff.append(" <td align='center'>\n"); strBuff.append(" <b>Exc?</b>\n"); strBuff.append(" </td>\n"); if (this.getColumnTitles().indexOf(";")>0){ titulos = this.getColumnTitles().split(";"); widths = this.getColumnWidths().split(";"); types = this.getColumnTypes().split(";"); if (titulos.length != widths.length){ throw new JspException("Numero de Parametros em [columnTitles] � diferente de [columnWidths]"); } if (titulos.length != types.length){ throw new JspException("Numero de Parametros em [columnTitles] � diferente de [columnTypes]"); } }else{ titulos = new String[1]; titulos[0] = this.getColumnTitles(); widths = new String[1]; widths[0] = this.getColumnWidths(); types = new String[1]; types[0] = this.getColumnTypes(); } for(i = 0; i < titulos.length; i++){ strBuff.append(" <td>\n"); strBuff.append(" <b>"+titulos[i]+"</b>\n"); strBuff.append(" </td>\n"); } strBuff.append(" </tr>\n"); for(i = 0; i < titulos.length; i++){ strBuff.append(" <input type='hidden' name='"+getName()+"columnType_"+(i+1)+"' id='"+getName()+"columnType_"+(i+1)+"' disabled value='"+types[i]+"'>\n"); } int numLinhasAux = Integer.parseInt("0" + getNumLinhas()); for(int x =0; x < numLinhasAux; x++){ strBuff.append(" <tr id='"+getName()+"tr_"+x+"'>\n"); strBuff.append(" <td align='center' id='"+getName()+"td0_excluir' style='cursor:hand' onclick=\""+getName()+"excluir('"+getName()+"tr_"+x+"')\">X</td>\n"); for(int j=0; j < titulos.length; j++){ if (types[j].equalsIgnoreCase("COMBO")){ strBuff.append("<input type='hidden' name='"+getName()+"gridSelect_"+getName()+"td"+(j+1)+"_"+x+"' id='"+getName()+"gridSelect_"+getName()+"td"+(j+1)+"_"+x+"' disabled>\n"); } strBuff.append(" <td id='"+getName()+"td"+(j+1)+"_"+x+"' onclick=\""+getName()+"edita(this, '"+types[j]+"', '"+getName()+"tr_"+x+"', "+(j+1)+")\" width='"+widths[j]+"'>"+valorDefault+"</td>\n"); } strBuff.append(" </tr>\n"); } strBuff.append("</table>\n"); strBuff.append(" <div id='"+getName()+"divTexto' style='display:none;position:absolute'>\n"); strBuff.append(" <input type='text' name='"+getName()+"campoTexto' id='"+getName()+"campoTexto' size='100' onkeyup=\""+getName()+"setValorCelula('TEXT');\">\n"); strBuff.append(" </div>\n"); strBuff.append(" <div id='"+getName()+"divData' style='display:none;position:absolute'>\n"); strBuff.append(" <input type='text' name='"+getName()+"campoData' id='"+getName()+"campoData' size='10' maxlength='10' onkeypress=\"return formataCampo(document."+getFormName()+", '"+getName()+"campoData', '99/99/9999', event);\" onkeyup=\""+getName()+"setValorCelula('DATE');\">\n"); strBuff.append(" </div>\n"); strBuff.append(" <div id='"+getName()+"divNumber' style='display:none;position:absolute'>\n"); strBuff.append(" <input type='text' name='"+getName()+"campoNumber' id='"+getName()+"campoNumber' size='10' onkeypress=\"return bloqueia_nao_numerico(event)\" onkeyup=\""+getName()+"setValorCelula('NUMBER');\">\n"); strBuff.append(" </div>\n"); strBuff.append(" <div id='"+getName()+"divMoney' style='display:none;position:absolute'>\n"); strBuff.append(" <input type='text' name='"+getName()+"campoMoney' id='"+getName()+"campoMoney' size='10' onkeypress=\"bloqueia_nao_numerico_curr(this.value);\" onkeyup=\""+getName()+"setValorCelula('MONEY');\">\n"); strBuff.append(" </div>\n"); for(int j=0; j < titulos.length; j++){ if (types[j].equalsIgnoreCase("COMBO")){ strBuff.append(" <div id='"+getName()+"divSelect"+(j+1)+"' style='display:none;position:absolute'>\n"); strBuff.append(" <select name='"+getName()+"campoSelect"+(j+1)+"' id='"+getName()+"campoSelect"+(j+1)+"' onchange=\""+getName()+"setValorCelula('COMBO');\">\n"); strBuff.append(" <option value='1'>Select1</option>\n"); strBuff.append(" <option value='2'>Select2</option>\n"); strBuff.append(" <option value='3'>Select3</option>\n"); strBuff.append(" </select>\n"); strBuff.append(" </div>\n"); } } strBuff.append("\n"); strBuff.append("<script>\n"); strBuff.append(" function "+getName()+"edita(obj, tipo, tr, numColuna){\n"); strBuff.append(" var div = '';\n"); strBuff.append(" var campo = '';\n"); strBuff.append(" var trObj = document.getElementById(tr);\n"); strBuff.append(" //Verifica se esta excluida a linha\n"); strBuff.append(" if (trObj.bgColor == '#FF0000' || trObj.bgColor == '#ff0000'){\n"); strBuff.append(" return;\n"); strBuff.append(" }\n"); strBuff.append(" if (tipo == 'TEXT'){\n"); strBuff.append(" div = '"+getName()+"divTexto';\n"); strBuff.append(" campo = '"+getName()+"campoTexto';\n"); strBuff.append(" }\n"); strBuff.append(" if (tipo == 'COMBO'){\n"); strBuff.append(" div = '"+getName()+"divSelect'+numColuna;\n"); strBuff.append(" campo = '"+getName()+"campoSelect'+numColuna;\n"); strBuff.append(" }\n"); strBuff.append(" if (tipo == 'DATE'){\n"); strBuff.append(" div = '"+getName()+"divData';\n"); strBuff.append(" campo = '"+getName()+"campoData';\n"); strBuff.append(" }\n"); strBuff.append(" if (tipo == 'NUMBER'){\n"); strBuff.append(" div = '"+getName()+"divNumber';\n"); strBuff.append(" campo = '"+getName()+"campoNumber';\n"); strBuff.append(" }\n"); strBuff.append(" if (tipo == 'MONEY'){\n"); strBuff.append(" div = '"+getName()+"divMoney';\n"); strBuff.append(" campo = '"+getName()+"campoMoney';\n"); strBuff.append(" }\n"); strBuff.append(" document.getElementById('"+getName()+"divTexto').style.display='none';\n"); for(int j=0; j < titulos.length; j++){ if (types[j].equalsIgnoreCase("COMBO")){ strBuff.append(" document.getElementById('"+getName()+"divSelect"+(j+1)+"').style.display='none';\n"); } } strBuff.append(" document.getElementById('"+getName()+"divData').style.display='none';\n"); strBuff.append(" document.getElementById('"+getName()+"divNumber').style.display='none';\n"); strBuff.append(" document.getElementById('"+getName()+"divMoney').style.display='none';\n"); strBuff.append(" document.getElementById(div).style.left = obj.offsetLeft;\n"); strBuff.append(" document.getElementById(div).style.top = obj.offsetTop;\n"); strBuff.append(" document.getElementById(div).style.width = obj.offsetWidth;\n"); strBuff.append(" document.getElementById(div).style.width = obj.offsetWidth;\n"); strBuff.append(" campo = document.getElementById(campo);\n"); strBuff.append(" campo.style.width = obj.offsetWidth;\n"); strBuff.append(" if (tipo == 'COMBO'){\n"); strBuff.append(" var campoHidSelect = '"+getName()+"gridSelect_' + obj.id;\n"); strBuff.append(" campoHidSelect = document.getElementById(campoHidSelect);\n"); strBuff.append(" campo.selectedIndex = "+getName()+"pegaIndiceComboGrid(campo, campoHidSelect.value);\n"); strBuff.append(" }else{\n"); strBuff.append(" campo.value = "+getName()+"pegaValorTexto(obj);\n"); strBuff.append(" }\n"); strBuff.append(" document."+getFormName()+"."+getName()+"controle.value = obj.id;\n"); strBuff.append(" document."+getFormName()+"."+getName()+"numeroColuna.value = numColuna;\n"); strBuff.append(" document.getElementById(div).style.display='block';\n"); strBuff.append(" campo.focus();\n"); strBuff.append(" if (tipo == 'DATE'){\n"); strBuff.append(" campo.select();\n"); strBuff.append(" }\n"); strBuff.append(" }\n"); strBuff.append(" function "+getName()+"setValorCelula(tipo){\n"); strBuff.append(" var obj = document.getElementById(document."+getFormName()+"."+getName()+"controle.value);\n"); strBuff.append(" var objNumColuna = document."+getFormName()+"."+getName()+"numeroColuna;\n"); strBuff.append(" if (tipo == 'TEXT'){\n"); strBuff.append(" "+getName()+"setaValorTexto(obj, document."+getFormName()+"."+getName()+"campoTexto.value);\n"); strBuff.append(" }\n"); strBuff.append(" if (tipo == 'COMBO'){\n"); strBuff.append(" var campoSelect = '"+getName()+"campoSelect'+objNumColuna.value;\n"); strBuff.append(" campoSelect = document.getElementById(campoSelect);\n"); strBuff.append(" \n"); strBuff.append(" "+getName()+"setaValorTexto(obj, campoSelect.options[campoSelect.selectedIndex].text);\n"); strBuff.append(" var campo = '"+getName()+"gridSelect_' + obj.id;\n"); strBuff.append(" campo = document.getElementById(campo);\n"); strBuff.append(" campo.value = campoSelect.options[campoSelect.selectedIndex].value;\n"); strBuff.append(" }\n"); strBuff.append(" if (tipo == 'DATE'){\n"); strBuff.append(" "+getName()+"setaValorTexto(obj, document."+getFormName()+"."+getName()+"campoData.value);\n"); strBuff.append(" }\n"); strBuff.append(" if (tipo == 'NUMBER'){\n"); strBuff.append(" "+getName()+"setaValorTexto(obj, document."+getFormName()+"."+getName()+"campoNumber.value);\n"); strBuff.append(" }\n"); strBuff.append(" if (tipo == 'MONEY'){\n"); strBuff.append(" "+getName()+"setaValorTexto(obj, document."+getFormName()+"."+getName()+"campoMoney.value);\n"); strBuff.append(" }\n"); strBuff.append(" }\n"); strBuff.append(" function "+getName()+"_getResultado(){\n"); strBuff.append(" var obj;\n"); strBuff.append(" var result = '';\n"); strBuff.append(" var trObj;\n"); strBuff.append(" var campo;\n"); strBuff.append(" var coluna;\n"); strBuff.append(" var idUltLinhaComValor = "+getName()+"getUltLinhaComValor();\n"); strBuff.append(" for (var i = 0; i <= idUltLinhaComValor; i++){\n"); strBuff.append(" trObj = document.getElementById('"+getName()+"tr_'+i);\n"); strBuff.append(" if (trObj.bgColor == '#FF0000' || trObj.bgColor == '#ff0000'){\n"); strBuff.append(" continue;\n"); strBuff.append(" }\n"); strBuff.append(" linha = '';\n"); strBuff.append(" for (var j = 1; j <= 6; j++){\n"); strBuff.append(" td = '"+getName()+"td' + j + '_' + i;\n"); strBuff.append(" coluna = '"+getName()+"columnType_' + j;\n"); strBuff.append(" coluna = document.getElementById(coluna);\n"); strBuff.append(" if (coluna.value == 'COMBO'){\n"); strBuff.append(" campo = '"+getName()+"gridSelect_' + td;\n"); strBuff.append(" campo = document.getElementById(campo);\n"); strBuff.append(" result = result + campo.value + '##';\n"); strBuff.append(" }else{\n"); strBuff.append(" obj = document.getElementById(td);\n"); strBuff.append(" result = result + "+getName()+"pegaValorTexto(obj) + '##';\n"); strBuff.append(" }\n"); strBuff.append(" }\n"); strBuff.append(" result = result + '||';\n"); strBuff.append(" }\n"); strBuff.append(" alert(result);\n"); strBuff.append(" }\n"); strBuff.append(" function "+getName()+"getUltLinhaComValor(){\n"); strBuff.append(" var linha = '';\n"); strBuff.append(" var obj;\n"); strBuff.append(" var idUltLinhaComValor = 0;\n"); strBuff.append(" for (var i = 0; i < "+getNumLinhas()+"-1; i++){\n"); strBuff.append(" linha = '';\n"); strBuff.append(" for (var j = 1; j <= 6; j++){\n"); strBuff.append(" td = '"+getName()+"td' + j + '_' + i;\n"); strBuff.append(" obj = document.getElementById(td);\n"); strBuff.append(" linha = linha + "+getName()+"pegaValorTexto(obj);\n"); strBuff.append(" }\n"); strBuff.append(" if (verifica_branco(linha)){\n"); strBuff.append(" idUltLinhaComValor = idUltLinhaComValor + 1;\n"); strBuff.append(" }\n"); strBuff.append(" }\n"); strBuff.append(" return idUltLinhaComValor;\n"); strBuff.append(" }\n"); strBuff.append(" function "+getName()+"excluir(tr){\n"); strBuff.append(" var trObj = document.getElementById(tr);\n"); strBuff.append(" trObj.bgColor = '#FF0000';\n"); strBuff.append(" }\n"); strBuff.append(" function "+getName()+"pegaIndiceComboGrid(combo, valor){\n"); strBuff.append(" for(var i = 0; i < combo.options.length; i++){\n"); strBuff.append(" if (combo.options[i].value == valor){\n"); strBuff.append(" return i;\n"); strBuff.append(" }\n"); strBuff.append(" }\n"); strBuff.append(" return -1;\n"); strBuff.append(" }\n"); strBuff.append(" function "+getName()+"pegaValorTexto(obj){\n"); strBuff.append(" if ("+getName()+"_isMozilla){\n"); strBuff.append(" return obj.textContent;"); strBuff.append(" }else{\n"); strBuff.append(" return obj.innerText;"); strBuff.append(" }\n"); strBuff.append(" }\n"); strBuff.append(" function "+getName()+"setaValorTexto(obj,valor){\n"); strBuff.append(" if ("+getName()+"_isMozilla){\n"); strBuff.append(" obj.textContent = valor;"); strBuff.append(" }else{\n"); strBuff.append(" obj.innerText = valor;"); strBuff.append(" }\n"); strBuff.append(" }\n"); strBuff.append("</script>\n"); strBuff.append("</div>\n"); try { pageContext.getOut().println(strBuff.toString()); } catch (IOException e) { e.printStackTrace(); throw new JspException(e); } return SKIP_BODY; } public String getCollection() { return collection; } public void setCollection(String collection) { this.collection = collection; } public String getCollectionCombos() { return collectionCombos; } public void setCollectionCombos(String collectionCombos) { this.collectionCombos = collectionCombos; } public String getColumnReferences() { return columnReferences; } public void setColumnReferences(String columnReferences) { this.columnReferences = columnReferences; } public String getColumnTitles() { return columnTitles; } public void setColumnTitles(String columnTitles) { this.columnTitles = columnTitles; } public String getColumnTypes() { return columnTypes; } public void setColumnTypes(String columnTypes) { this.columnTypes = columnTypes; } public String getColumnWidths() { return columnWidths; } public void setColumnWidths(String columnWidths) { this.columnWidths = columnWidths; } public String getHeight() { return height; } public void setHeight(String height) { this.height = height; } public String getInternalWidth() { return internalWidth; } public void setInternalWidth(String internalWidth) { this.internalWidth = internalWidth; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getWidth() { return width; } public void setWidth(String width) { this.width = width; } public String getFormName() { return formName; } public void setFormName(String formName) { this.formName = formName; } public String getNumLinhas() { return numLinhas; } public void setNumLinhas(String numLinhas) { this.numLinhas = numLinhas; } }