私の例には、af:selectItems-attribute を使用した selectOneMenu があります。選択項目は、次のように Bean から解決されます。
<h:selectOneMenu value="#{bean.value}">
<f:selectItems value="#{bean.selectItems}" var="obj" itemValue="#{obj}" itemLabel="#{obj.name}"/>
</h:selectOneMenu>
私の Bean の getSelectItems() メソッドは次のようになります。
public List<MyObject> getSelectItems() {
List<MyObject> list = new LinkedList<MyObject>();
MyObject obj = new MyObject("Peter");
list.add(obj);
return list;
}
表示されるオブジェクトは、属性「名前」を持つ単純なオブジェクトです。
ここまでは特に何もありません。しかし今、私は自分の方法をそれに変更します:
public List<MyObject> getSelectItems() {
List<MyObject> list = new LinkedList<MyObject>();
MyObject obj = new MyObject("<script>alert('xss is bad');</script>");
list.add(obj);
return list;
}
javascript は MenuRenderer-Class によってエスケープされず、ページにアラート メッセージが表示されます。
SelectItem の escape-attribute のデフォルト値が「false」になっている原因はありますか? どうすればその問題を解決できますか? (私は Mojarra 2.1.7 を使用しています)