Index: lams_central/src/java/org/lamsfoundation/lams/web/tag/MultiLinesTextareaTag.java =================================================================== diff -u -r4cbe6aa5e34abb7af38710fd0aa50624c951211e -rb571856bf715075acc1b04914f622eaf80d4a8f3 --- lams_central/src/java/org/lamsfoundation/lams/web/tag/MultiLinesTextareaTag.java (.../MultiLinesTextareaTag.java) (revision 4cbe6aa5e34abb7af38710fd0aa50624c951211e) +++ lams_central/src/java/org/lamsfoundation/lams/web/tag/MultiLinesTextareaTag.java (.../MultiLinesTextareaTag.java) (revision b571856bf715075acc1b04914f622eaf80d4a8f3) @@ -23,6 +23,7 @@ import javax.servlet.jsp.JspException; +import org.apache.commons.lang.StringUtils; import org.apache.struts.taglib.html.TextareaTag; /** * Customerized HTML textarea tag. This tag must used with /lams_web_root/includes/javascript/common.js. @@ -50,9 +51,10 @@ if(this.property == null) return super.renderTextareaElement(); String tagName = prepareName(); + String hiddenId = tagName + "__lamshidden"; //add Javascript event handler - String chbr ="filterData(this,document.getElementById('" + tagName + "'));"; + String chbr ="filterData(this,document.getElementById('" + hiddenId + "'));"; String onChange = this.getOnchange(); if(onChange == null) onChange = chbr; @@ -67,24 +69,35 @@ //reset some values to another in order to use them in hidden field. String oldProperty= this.property; String oldValue = this.value; - + String oldId = this.getStyleId(); + this.value=getDataNoBr(this.value); this.property +="__textarea"; + if(StringUtils.isEmpty(this.getStyleId())) + this.setStyleId(tagName + "__lamstextarea"); StringBuffer results = new StringBuffer(super.renderTextareaElement()); this.property = oldProperty; + //construct hidden variable results.append(""); - this.value = oldValue; + //onload script to reset hidden value, so it can works even onChange event does not happen when edit. + //the reason of why not directly assign value to hidden variable is + //hidden variable treat < and < are same value when submit to form. The only way is use Javascript + //reset it value. + StringBuffer filterScript = new StringBuffer(""); + results.append(filterScript); + //restore value + this.value = oldValue; + this.setStyleId(oldId); return results.toString(); } /** @@ -106,24 +119,7 @@ } return data == null?"":data; } - /** - * Change input string \n or \r\n (dependent on OS) into <BR> tag. - * @param data - * @return - * @throws JspException - */ - private String getDataWithBr(String data) throws JspException{ - if(data != null){ - //change back - if(os.toLowerCase().indexOf("win") != -1) - data = data.replaceAll("\r\n","
"); - else - data = data.replaceAll("\n","
"); - } - return data; - } - /** * Renders the value displayed in the <textarea> tag. * @override