如何在依赖JavaScript的Struts表单中处理换行符
How to handle newlines in a Struts form that relies on JavaScript
我有一个包含Map的Struts表单:
private Map<Long, String> questionAnswers = new TreeMap<Long, String>();
我有这个变量的普通getter和setter(这里没有显示),我也有Struts工作所需的getter和setter(使用String/Object):
public Object getQuestionAnswer(String questionId) {
return getQuestionAnswers().get(questionId);
}
public void setQuestionAnswer(String questionId, Object answerText) {
String answer = (answerText == null) ? "" : answerText.toString();
getQuestionAnswers().put(Long.valueOf(questionId), answer);
}
在我的JSP中,我动态地生成用于输入映射值的文本区域。这一切都很好。但是,当表单无效时,我需要再次动态生成文本区域,并将用户文本放回文本区域。我现在重新填充文本区域,如下所示:
<c:forEach items="${myForm.questionAnswers}" var="questionAnswer">
var textareaBoxName = "questionAnswer(" + '${questionAnswer.key}' + ")";
var textareaBox = document.getElementsByName(textareaBoxName)[0];
if (textareaBox) {
$('textarea[name=' + textareaBoxName + ']').val('${questionAnswer.value}');
}
</c:forEach>
这很好,除非你在文本区输入一个换行符。然后一个JavaScript错误抱怨"未终止字符串常量"。我猜正在执行换行符而不是仅仅读取。
在setQuestionAnswer
方法中,我进行了一些调试,发现在文本区域中输入的换行符被读取为2个字符,转换成整数是13和10(我认为是'r和'n)。我尝试在setQuestionAnswer
方法(使用字符串replaceAll
方法)中将"'r'n"替换为"'n",但发生了同样的错误。然后我尝试将"'r'n"替换为"%0A"(我认为这是JavaScript换行符)。虽然这消除了JavaScript错误,但文本区域现在显示的是"%0A"而不是换行符。我尝试了各种转义和不转义,但都没有成功(注意,我还希望保留特殊字符)。
有没有人知道如何在无效提交的文本区框中保留换行符和特殊字符?我需要这在IE工作。我还想避免使用一些特殊字符/字符串来"表示"换行符,然后在JavaScript中替换换行符等。
自${questionAnswer。value}被放在JavaScript字符串文字中,你需要转义它,就像你在JavaScript文字中想要换行一样:行Hello和World必须写成'Hello'nWorld'。看看commons-lang StringEscapeUtils的escapeECMAScript方法。除了转义换行符,它还将转义制表符、撇号等。
将此方法设置为EL方法,并将其直接用于JSP:
$('textarea[name=' + textareaBoxName + ']').val('${myFn:escapeJs(questionAnswer.value)}');
您也可以静态地生成文本区域,而不是使用JavaScript生成它们:
- 将布尔值存储在隐藏字段中以进行表单处理
- 表单处理后 PHP 重定向
- Dojo表单处理事件
- jQuery表单处理,如何在回调时重新分配函数
- 如何获取表单处理事件
- 节点.js中的表单处理
- JavaScript onSubmit 表单处理
- 我有三个地方供用户登录,在同一页面上,我如何在一个功能中让所有三个按钮工作和三个表单处理
- 从老式的发布后重定向到现代的 ajax 表单处理
- 应用程序脚本 htmlservice 表单处理示例 jquery
- 使用离子移动应用程序与 Django 进行表单处理的最佳方式
- Javascript getElementByID和表单处理
- 使用javascript进行表单处理
- 为什么不是't正在调用AngularJS表单处理程序方法
- 将元素ID传递到数组中以进行POST表单处理
- 从url中提取facebook令牌并进行表单处理
- jQuery HTML表单处理
- PHP表单处理
- 为什么JavaScript表单处理根本不是标准的?
- 如何使用asp.net网页表单处理AngularJs