Я использую тег запроса JSTL для выполнения запроса mysql следующим образом:
<sql:query var="altTime" dataSource="${dataSource}" scope="request">
SELECT distinct combined.alt_tm FROM (
SELECT distinct sal_tm as alt_tm FROM sales WHERE sal_snum=? AND sal_dt=? AND sal_trn=? AND sal_trm=?
UNION ALL
SELECT distinct tm_cr as alt_tm FROM credit WHERE stc_cr=? AND ym_cr=? AND trn_cr=? AND trm_cr=?
UNION ALL
SELECT distinct tm_nm as alt_tm FROM nmc WHERE stc_nm=? AND ym_nm=? AND trn_nm=? AND trm_nm=?
UNION ALL
SELECT distinct tm_gc as alt_tm FROM gift WHERE stc_gc=? AND ym_gc=? AND trn_gc=? AND trm_gc=?
) AS combined WHERE alt_tm != '00:00:00' LIMIT 1
<sql:param value="${store}"/>
<sql:param value="${date}"/>
<sql:param value="${trans_no}"/>
<sql:param value="${terminal}"/>
<sql:param value="${store}"/>
<sql:param value="${date}"/>
<sql:param value="${trans_no}"/>
<sql:param value="${terminal}"/>
<sql:param value="${store}"/>
<sql:param value="${date}"/>
<sql:param value="${trans_no}"/>
<sql:param value="${terminal}"/>
<sql:param value="${store}"/>
<sql:param value="${date}"/>
<sql:param value="${trans_no}"/>
<sql:param value="${terminal}"/>
</sql:query>
Это работает, и теперь я пытаюсь установить параметры динамически, создавая их в виде строки, а затем помещая в тег. Измените последний тег param на строку и проверьте. В сценарии
String test="<sql:param value=\"${terminal}\"/>";
В теге запроса используйте строку в качестве последней строки
<%=test %>
Но этот сбой во время работы. Сообщение об ошибке: «Для параметра 16 не указано значение». Я предполагаю, что он анализируется как строка и не работает как обычный параметр. Есть идеи, что я могу избежать этого? Ниже приведены подробные сообщения об ошибках, в которых показана последняя строка, которая не должна (должна анализироваться как тег jtsl)
Exception handling request to /kwi_demo/generic2/ecd/ecd1.jsp: org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException:
SELECT distinct combined.alt_tm FROM (
SELECT distinct sal_tm as alt_tm FROM sales WHERE sal_snum=? AND sal_dt=? AND sal_trn=? AND sal_trm=?
UNION ALL
SELECT distinct tm_cr as alt_tm FROM credit WHERE stc_cr=? AND ym_cr=? AND trn_cr=? AND trm_cr=?
UNION ALL
SELECT distinct tm_nm as alt_tm FROM nmc WHERE stc_nm=? AND ym_nm=? AND trn_nm=? AND trm_nm=?
UNION ALL
SELECT distinct tm_gc as alt_tm FROM gift WHERE stc_gc=? AND ym_gc=? AND trn_gc=? AND trm_gc=?
) AS combined WHERE alt_tm != '00:00:00' LIMIT 1
<sql:param value=${terminal}/>
: No value specified for parameter 16