2010-10-14 99 views

回答

11

您可以通过${param}访问单值请求参数。

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> 
... 
<input name="foo" value="${fn:escapeXml(param.foo)}"> 
<textarea name="bar">${fn:escapeXml(param.bar)}</textarea> 
... 
<input type="radio" name="faz" value="a" ${param.faz == 'a' ? 'checked' : ''} /> 
<input type="radio" name="faz" value="b" ${param.faz == 'b' ? 'checked' : ''} /> 
<input type="radio" name="faz" value="c" ${param.faz == 'c' ? 'checked' : ''} /> 
... 
<select name="baz"> 
    <option value="a" ${param.baz == 'a' ? 'selected' : ''}>label a</option> 
    <option value="b" ${param.baz == 'b' ? 'selected' : ''}>label b</option> 
    <option value="c" ${param.baz == 'c' ? 'selected' : ''}>label c</option> 
</select> 

请注意,为了防止XSS攻击,JSTL的fn:escapeXml()是必要的。另见XSS prevention in JSP/Servlet web application

您可以通过${paramValues}和EL 3.0流访问多值请求参数。

<input type="checkbox" name="far" value="a" ${paramValues.far.stream().anyMatch(v->v == 'a').get() ? 'checked' : ''} /> 
<input type="checkbox" name="far" value="b" ${paramValues.far.stream().anyMatch(v->v == 'b').get() ? 'checked' : ''} /> 
<input type="checkbox" name="far" value="c" ${paramValues.far.stream().anyMatch(v->v == 'c').get() ? 'checked' : ''} /> 
... 
<select name="boo" multiple> 
    <option value="a" ${paramValues.boo.stream().anyMatch(v->v == 'a').get() ? 'selected' : ''}>label a</option> 
    <option value="b" ${paramValues.boo.stream().anyMatch(v->v == 'b').get() ? 'selected' : ''}>label b</option> 
    <option value="c" ${paramValues.boo.stream().anyMatch(v->v == 'c').get() ? 'selected' : ''}>label c</option> 
</select> 
+0

它的工作原理与文本的Fileds但我如果我想与和值,例如是静态的:价值=”?E” – palAlaa 2010-10-14 22:42:28

+0

有条件地渲染'checked' 。例如'$ {param.foo =='E'?'checked':''}'。我用更多的例子更新了答案。 – BalusC 2010-10-14 22:44:45

+0

它的工作原理谢谢你,关于xss,我试图为所有参数对于所有的jsp页面,我认为这可能比检查每个输入更容易,我可以知道你对此的看法吗? – palAlaa 2010-10-14 22:59:01

2

对于select语句也许你可以使用javascript。

document.getElementById('baz').value = '${param.baz}';