Пользовательский атрибут всплывающей подсказки тега JSF
можно ли добавить атрибут "title" тег в JSF, например:
<f:selectItems value="#{foo.fooList}" title="{foo.fooDescription}"/>
сгенерированный HTML:
<select>
<option value="foo1" title="description1">foo ex1</option>
<option value="foo2" title="description2">foo ex2</option>
</select>
5 ответов
у меня нет элегантного решения, но это можно сделать. Я предполагаю, что JSF 2+ & Facelets VDL.
для управляемого Боба Foo
:
@ManagedBean @RequestScoped
public class Foo {
private List<SelectItem> fooList = Arrays.asList(
new SelectItem("value1", "label1", "description1"),
new SelectItem("value2", "label2", "description2"));
public List<SelectItem> getFooList() {
return fooList;
}
}
вы можете использовать JavaScript для установки title
атрибут на узле DOM:
<h:selectOneMenu binding="#{requestScope.fooSelectOne}">
<f:selectItems value="#{foo.fooList}" />
</h:selectOneMenu>
<script>
(function() {
var selectName = '#{requestScope.fooSelectOne.clientId}';
var kids = document.getElementsByName(selectName)[0]
.getElementsByTagName("option");
var index = 0;
<ui:repeat value="#{foo.fooList}" var="_opt">
kids[index++].title = '#{_opt.description}'; //TODO: escape this
</ui:repeat>
}());
</script>
для создания title
атрибут на вашем сгенерированном options
, вы можете просто использовать passthrough такие атрибуты:
<f:selectItems value="#{values}" p:title="Your title here"/>
Я думаю, что для f:selectItems
тега такого нет (title
атрибут) в наличии. У вас есть этот атрибут в равнина option
tag in HTML
а не jsf
. Я думаю, вы должны использовать простой select
тег вместо selectOneMenu
и title
значение.
Предположим ваш <h:selectOneMenu
Как ниже.
<h:form id="myForm">
<h:selectOneMenu id="myCombo">
<f:selectItems value="#{foo.fooList}"/>
</h:selectOneMenu>
</h:form>
сейчас window.onload
вы можете перебирать option
s и добавьте title
ниже
<script>
window.onload = function() {
var options = document.getElementById("myForm:myCombo").options;
for(var i = 0; i < options.length; i++) {
options[i].title = "description" + i;
}
}
</script>
атрибут itemDescription не будет отображаться в шве 2.2.
лучшим решением будет использование javascript для отображения всплывающей подсказки для каждого выбранного элемента.
<script type="text\javascript">
function getTooltip(id){
var options = document.getElementById(id).options;
for(var i = 0; i < options.length; i++) {
options[i].title = "description" + i;
}
}
</script>
Если ваш id генерируется динамически или другим способом, например.
<rich:dataTable value="#{mybean.list}">
<h:selectOneMenu value="#{mybean.selectedValue}" onmouseover=getTooltip(this.id)>
<f:selectitems value="#{mybean.selectlist}">
</h:selectOneMenu>
</rich:datatable>
это решение будет работать для всех динамически генерируемых идентификаторов, а также простых