どうぞ:
<ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.org/ui" template="/WEB-INF/templates/globalTemplate.xhtml">
<ui:define name="title">15320268</ui:define>
<ui:define name="content">
<p:growl id="growl" showDetail="true" />
<h:form>
<p:dataTable var="name" value="#{so15320268.nameList}" rowIndexVar="rowIndex" widgetVar="table">
<p:column>
<p:selectOneMenu widgetVar="menu_#{rowIndex}" onchange="select(menu_#{rowIndex});">
<f:selectItem itemLabel="Select" itemValue=""></f:selectItem>
<f:selectItem itemLabel="Month" itemValue="Month"></f:selectItem>
<f:selectItem itemLabel="Week" itemValue="Week"></f:selectItem>
</p:selectOneMenu>
</p:column>
</p:dataTable>
</h:form>
<script type="text/javascript">
function select(widgetVar){
var selectMenuDiv = widgetVar.getJQ(); // it will give you the underlying jquery object
//alert(selectMenuDiv.get(0)); // uncoment this line it will show: [object HTMLDivElement];
// so it is not select element
var selectMenu = $(selectMenuDiv).find('select');
var selectValue = $('> option:selected', selectMenu).val();
alert(selectValue);
}
</script>
</ui:define>
</ui:composition>
次の画像を見てください。これが<p:selectOneMenu/>
レンダリング
方法です。
強調表示された div の id を注意深く見てください。で終わりselector_
ます。xhtml は次のとおり<p:selectOneMenu id="selector_#{rowIndex}"
です。el と JSF で ID を作成しようとしましたが、これは許可されていません。その#{rowIndex}
ため、ID がレンダリングされませんでした。ドキュメンテーションjava.lang.String
によると、idが el をサポートする場合は id を評価する必要があり、これは次のようになります。
javax.el.ValueExpression (java.lang.String に評価される必要があります)
おそらくその理由はhasのメソッドpublic void setValueExpression(String name, ValueExpression binding)
にあります。javax.faces.component.UIComponent
if (!(binding.isLiteralText()))
id で el を使用できないことを理解するのに役立つことを願っています。