document.oForm.aaa.value="<%=strLoginMemo%>";报错!!!

blackhawk_yps 2004-09-03 06:48:33
JSP页面,javascript中
document.oForm.aaa.value="<%=strLoginMemo%>";
aaa是一个textarea。
当strLoginMemo这个字符串中有回车符的时候,代码就会报错,Unterminated string constant。
为什么呀?怎么处理比较好呢?
...全文
215 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
baffling 2004-12-11
  • 打赏
  • 举报
回复
gz
magicyang1982 2004-09-08
  • 打赏
  • 举报
回复
楼上高!
cao8208 2004-09-08
  • 打赏
  • 举报
回复
你可以写一个公共方法的类,加入下面的方法:
public static String toHtmlString(String p) {
StringBuffer sf = new StringBuffer();
for (int i = 0; i < p.length(); i++) {
char temp = p.charAt(i);
switch (temp) {
case ' ':
sf.append(" ");
break;
case '"':
sf.append(""");
break;
case '&':
sf.append("&");
break;
case '<':
sf.append("<");
break;
case '>':
sf.append(">");
break;
case '\'':
sf.append("'");
break;
case '\n':
sf.append("<br>");
break;
default:
sf.append(temp);
}
}
return sf.toString();
}
然后调用
自己调试一下
cao8208 2004-09-08
  • 打赏
  • 举报
回复
其实你这个不只有回车的时候出错,其他有关html特殊格式的字符都会出错。

必须都得替换成html可识别的
gumplei 2004-09-08
  • 打赏
  • 举报
回复
不错了,比我强多了。我不想活了
blackhawk_yps 2004-09-08
  • 打赏
  • 举报
回复
cao8208(咖啡泡面) :是<br>
xunyiren(从jsp开始):用replace(str,"\r\n","\\r\\n")还是不行。我试了一下
replace(str,"\\r\\n","\\\\r\\\\n")
replace(str,"\\n","\\\\n")
也都不行,转换后我看了str还是换行输出。我太弱了,唉,郁闷!
xunyiren 2004-09-08
  • 打赏
  • 举报
回复
用你的替换函数,把\r\n替换成\\r\\n应该就可以了...
replace(str,"\r\n","\\r\\n");

你想想就明白了,我们要把document.oForm.aaa.value付值为"aaa\r\nbbbb\r\ncccc"这样的字符串,也就是说要让strLoginMemo这个jsp变量的值为"aaa\\r\\nbbbb\\r\\ncccc"
cao8208 2004-09-08
  • 打赏
  • 举报
回复
是<br>吧,哪有<br/>这个东西
blackhawk_yps 2004-09-08
  • 打赏
  • 举报
回复
xunyiren(从jsp开始) :
用你的代码,在var str="<%=strLoginMemo%>";处就会报错,还是换行的问题。
xunyiren 2004-09-08
  • 打赏
  • 举报
回复
<SCRIPT LANGUAGE="JavaScript">
<!--
var str="<%=strLoginMemo%>";
document.oForm.aaa.value=str.replace(/[\r\n]/g,""))
//-->
</SCRIPT>
blackhawk_yps 2004-09-08
  • 打赏
  • 举报
回复
shine333(enihs):不愧为2星上将啊,呵呵,终于替换成功!
chancelin 2004-09-08
  • 打赏
  • 举报
回复

public static String replace(String text, String repl, String with, int max) {
if(text == null)
return null;
StringBuffer buf = new StringBuffer(text.length());
int start = 0;
for(int end = 0; (end = text.indexOf(repl, start)) != -1;) {
buf.append(text.substring(start, end)).append(with);
start = end + repl.length();
if(--max == 0)
break;
}

buf.append(text.substring(start));
return buf.toString();
}
shine333 2004-09-08
  • 打赏
  • 举报
回复
TO cao8208(咖啡泡面)
孤陋寡闻了吧,<td nowrap="nowrap">都有,<br/><hr/>是为了适应xml的语法:P
不过你提出的其它HTML代码也会出错,这个是有可能,但是在这个例子里不会,
因为<%= %>位于javascript的""里面, "号倒是会错,而且在这个例子里面你替换错了方向

case '"':
sf.append("\\\"");
break;
才对, 因为楼主生成的目标代码是将java String: abc"d换行efg 变换成 javascript中之间的

document.form.textarea.value = "abc\"d\nefg";

上面一行是楼主那个<%=%>那里的产生的HTML的最终样子,

因此不是<br>或者<br/>,还是应当使用\n或者\r \f之类,

public String getJSString(String text) {
StringBuffer buff = new StringBuffer();
StringTokenizer st = new StringTokenizer(text, "\n\r\f\"", true);
while(st.hasMoreTokens()) {
String t = st.nextToken();

char c = t.charAt(0);
switch (c) {
case '\n':
buff.append("\\n");
break;
case '\r':
buff.append("\\r");
break;
case '\f':
buff.append("\\f");
break;
case '\"':
buff.append("\\\"");
break;
default:
buff.append(t);
}
}
return buff.toString();
}
blackhawk_yps 2004-09-08
  • 打赏
  • 举报
回复
cao8208(咖啡泡面):是的,确实是这样。不过问题还是没有解决。document.oForm.aaa.value="abc\ndefg";这样直接赋值可以
<%
strLoginMemo="aaa\\nbbb";
...
%>
document.oForm.aaa.value="<%=strLoginMemo%>"
这样也可以。
但是
strLoginMemo经过替换后还是不行!
blackhawk_yps 2004-09-07
  • 打赏
  • 举报
回复
把帖子往前提提
blackhawk_yps 2004-09-07
  • 打赏
  • 举报
回复
shine333(enihs) :我对strLoginMemo进行了回车符替换,还是出同样的错误。我的替换函数如下
String replaceAll(String baseString, String oldString, String newString)
{

if (baseString == null)
{
return ((String)(null));
}

int newLength = newString.length();
int pos = -1;
while ((pos = baseString.indexOf(oldString, pos)) > -1)
{
final String before = baseString.substring(0, pos);
final String after = baseString.substring(pos + 1);
baseString = before + newString + after;
pos = pos + newLength;
}

return baseString;

}

如一个字符串str="aaa
bbb"
用此函数replace(str,"\n","<br>")替换后的输出是"aaa<br>bbb"。
但是运行到document.oForm.aaa.value="<%=strLoginMemo%>"时还是报同样的错。百思不得其解,回车符替换的时候有什么问题呢?是否不应该替换成<br>呢?
上面的程序段都是在页面onload事件中运行的。
blackhawk_yps 2004-09-06
  • 打赏
  • 举报
回复
谢谢shine333帮我确认了问题原因,我用的JDK1.3,因此需要自己写一个replaceAll函数,可能我替换回车符的写法有问题,还是出错。不过现在你已经帮我确定是这个问题啦。我看看能不能搞定,有问题再请教啦,稍晚结贴。
shine333 2004-09-03
  • 打赏
  • 举报
回复
回复人: nighthawk(梦游中……) ( ) 信誉:76 2004-09-03 20:31:00 得分: 0


第一次看到这种写法。js怎么和jsp中的变量勾搭上了?学习啊


这说明你还没有领悟JSP的最终目的是干什么的
shine333 2004-09-03
  • 打赏
  • 举报
回复
因为当strLoginMemo中有回车的时候,生成的JavaScript代码变成了

document.oForm.aaa.value="abc
defg";

结果JavaScript出错,如果你的JDK是1.4+的话,

那么<%=strLoginMemo.replaceAll("\\\n", "\\\\n")%>将Java String中的回车替换成JS String中用转义符表示的

结果
document.oForm.aaa.value="abc\ndefg";
dafei0320 2004-09-03
  • 打赏
  • 举报
回复
<%
String mm="111111";
%>
<script>
function click(name)
{
document.all.name.value=name;
}
</script>


<input type="text" name=name>
<input type="button" value="OK" onclick="click('<%=mm%>')">
加载更多回复(3)

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧