$("#medicine").append('<tr class="hide1 newRow" id="row'+medCurrentIndex+'">'
+'<td>'+medtype[medCurrentIndex]+'</td>'
+'<td>'+medicineName[medCurrentIndex]+'</td>'
+'<td>'+frequency[medCurrentIndex]+'</td>'
+'<td>'+dose[medCurrentIndex]+'</td>'
+'<td>'+quantity[medCurrentIndex]+'</td>'
+'<td>'+numberofDays[medCurrentIndex]+'</td>'
+'<c:choose>'
+'<c:when test="${role eq 'doctor' }">'
+'<td><button class="btn" type="button" name="edit" value="Edit" onclick="editMedRow('+medCurrentIndex+');">Edit</button></td>'
+'<td><button class="btn" type="button" name="delete" value="Delete" onclick="deleteMedRow('+medCurrentIndex+');">Delete</button></td>'
+'</c:when>'
+'<c:otherwise>'
+'<td><input type="text" id="cost" /></td>'
+'</c:otherwise>'
+'</c:choose>'
+'</tr>');
这段代码在 JSP 的javaScript中编写是否合法? 因为它给了我以下错误:
org.apache.jasper.JasperException:
来自TagLibraryValidator的c / in /EEB-INF/views/prescriptionTemporary.jsp的验证错误消息
79:“c中的非法文本:选择“tag:”'
答案 0 :(得分:2)
JSP中的任何Java代码都将在渲染时进行评估。这意味着,服务器将读取JSP代码,并将开始替换必要的Java代码的任何scriptlet或自定义标记(如JSTL)。这个例子很容易解释:
<script type="text/javascript">
var x = '${x}';
</script>
或以JSTL形式:
<script type="text/javascript">
var x = '<c:out value="${x}" />';
</script>
假设x
是一个值为&#34; Hello World&#34;的请求属性,这将在HTML中生成此输出:
<script type="text/javascript">
var x = 'Hello World';
</script>
在您的情况下,它会尝试将这部分代码转换为JSTL格式:
<c:choose>'
<!-- ^ this character is invalid. There must be a <c:when> right after <c:choose>
v this character is also invalid. There must be a <c:when> right after <c:choose> -->
+'<c:when test="${role eq 'doctor' }">'
简而言之,您不应尝试从JavaScript附加任何类型的Java代码(scriptlet,表达式语言,JSTL等自定义标记)。
答案 1 :(得分:0)
在javascript中编写jstl标签不起作用。解析jstl标签很久之后,JQuery的.append(...)
方法将在客户端启动。
如果您的目标是通过jstl选择要追加的内容,则需要进行重大改写。
编辑:
试试这个:
$("#medicine").append('<tr class="hide1 newRow" id="row'+medCurrentIndex+'">'
+'<td>'+medtype[medCurrentIndex]+'</td>'
+'<td>'+medicineName[medCurrentIndex]+'</td>'
+'<td>'+frequency[medCurrentIndex]+'</td>'
+'<td>'+dose[medCurrentIndex]+'</td>'
+'<td>'+quantity[medCurrentIndex]+'</td>'
+'<td>'+numberofDays[medCurrentIndex]+'</td>'
<c:choose>
<c:when test="${role eq 'doctor' }">
+'<td><button class="btn" type="button" name="edit" value="Edit" onclick="editMedRow('+medCurrentIndex+');">Edit</button></td>'
+'<td><button class="btn" type="button" name="delete" value="Delete" onclick="deleteMedRow('+medCurrentIndex+');">Delete</button></td>'
</c:when>
<c:otherwise>
+'<td><input type="text" id="cost" /></td>'
</c:otherwise>
</c:choose>
+'</tr>');
我想强调的是,虽然上面的代码段可能有用,但我不推荐。更好的解决方案是将${role}
转储到全局变量或隐藏输入中,并从JS端做出决策。或者在jstl中设置整个追加字符串。混合这两者使得阅读更加困难。