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