Java “内有非法文本”;c:选择;标签:"'; $(“#医学”)。附加(“” +''+medtype[medCurrentIndex]+'' +''+medicineName[medCurrentIndex]+'' +''+频率[medCurrentIndex]+'' +''+剂量[medCurrentIndex]+'' +''+数量[medCurrentIndex]+'' +''+天数[medCurrentIndex]+'' +'' +'' +“编辑” +“删除” +'' +'' +'' +'' +'' +'');
用JSP的javaScript编写此代码合法吗? 因为它给了我以下的错误: org.apache.jasper.jaspereException:TagLibraryValidator for c在/WEB-INF/views/prescriptionTemporary.jsp中的验证错误消息79:c:choose“tag:”中的非法文本Java “内有非法文本”;c:选择;标签:"'; $(“#医学”)。附加(“” +''+medtype[medCurrentIndex]+'' +''+medicineName[medCurrentIndex]+'' +''+频率[medCurrentIndex]+'' +''+剂量[medCurrentIndex]+'' +''+数量[medCurrentIndex]+'' +''+天数[medCurrentIndex]+'' +'' +'' +“编辑” +“删除” +'' +'' +'' +'' +'' +'');,java,javascript,jsp,jstl,Java,Javascript,Jsp,Jstl,用JSP的javaScript编写此代码合法吗? 因为它给了我以下的错误: org.apache.jasper.jaspereException:TagLibraryValidator for c在/WEB-INF/views/prescriptionTemporary.jsp中的验证错误消息79:c:choose“tag:”中的非法文本 JSP中的任何Java代码都将在呈现时进行评估。这意味着,服务器将读取JSP代码,并开始替换任何scriptlet或自定义标记(如JSTL)以获得必要的Jav
JSP中的任何Java代码都将在呈现时进行评估。这意味着,服务器将读取JSP代码,并开始替换任何scriptlet或自定义标记(如JSTL)以获得必要的Java代码。这可以通过以下示例轻松解释:
var x='${x}';
或以JSTL形式:
var x=“”;
假设x
是一个值为“Hello World”的请求属性,这将以HTML格式生成此输出:
var x=‘你好,世界’;
在您的情况下,它将尝试将这部分代码转换为JSTL格式:
'
+''
简而言之,您不应该尝试从JavaScript中附加任何类型的Java代码(scriptlet、表达式语言、自定义标记,如JSTL等)。用JavaScript编写JSTL标记是行不通的。JQuery的
.append(…)
方法将在解析JSTL标记很久之后在客户端启动
如果您的目标是通过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>');
$(“#医学”)。附加(“”
+''+medtype[medCurrentIndex]+''
+''+medicineName[medCurrentIndex]+''
+''+频率[medCurrentIndex]+''
+''+剂量[medCurrentIndex]+''
+''+数量[medCurrentIndex]+''
+''+天数[medCurrentIndex]+''
+“编辑”
+“删除”
+''
+'');
我想强调的是,尽管上面的代码片段可能有用,我不推荐它。更好的解决方案是转储
${role}
转换为全局变量或隐藏输入,并从JS端进行决策。或者在jstl中设置整个追加字符串。混合使用这两个字符串会使读取变得非常困难。当我使用而不是它时,它工作正常,但当我尝试使用它时抛出异常。y?正如Luiggi指出的,jstl解析器会在cho之间发现非法字符ose和when。即两个单引号和一个加号。Ya尝试了这个方法,但一段时间有效,另一段时间无效。对于这个问题的替代解决方案是什么?@user2696142首先你必须理解答案中的解释。然后你会想出一个解决方案。一种可能是将JSTL逻辑移到JavaScript端,然后选择什么通过模拟
标记中的逻辑来追加或不追加。
$("#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>');