HTTPおよびWebアプリケーションがどのように機能するかをまったく理解していないようです。要求/応答サイクルについて学ぶ必要があります。
AJAXはあなたがやりたいことには正しいことですが、名前が示すように、AJAXは非同期JavaScriptであり、Javaメソッド呼び出しをonchange属性に入れようとします。これは機能しません。
最初に要求したことを実行するには、ポートレットクラスを見つけてserveResource(ResourceRequest req, ResourceResponse resp)
メソッドを実装する必要があります。このメソッドでは、選択した値(String selectedVal = req.getParameter("selectedVal")
)を受け取り、その値に応じて何かを返します。
String result = null;
if ("blah".equals(selectedVal))
{ result = "Something"; }
else
{ result = "Something Else"; }
resourceResponse.getPortletOutputStream().write(result.getBytes("UTF-8"));
次に、そのメソッドに対してAJAX呼び出しを行う必要があります。大まかに次のようになります。
<portlet:resourceUrl var="resourceUrl">
<portlet:param name="selectedVal" value="PARAM_PLACEHOLDER_SELECTED_VAL" />
</portlet:resourceUrl>
<aui:script use="io">
function ajax<portlet:namespace />MySelect(selectedVal) {
A.io(
'${resourceUrl}'.replace("PARAM_PLACEHOLDER_SELECTED_VAL", selectedVal),
{
on: {
success: <portlet:namespace />processResponse(select, response);
}
}
);
function <portlet:namespace />processResponse(response) {
alert("Here's what java code returned:"+response+". Do whatever you want with it - with javascript");
}
</aui:script>
...
<aui:select label="My Selection" name="ms" id="ms" onchange="ajax<portlet:namespace>MySelect(this.values[this.selectedIndex])" >
<%
for(String item : itemList){
%>
<aui:option selected="<%= item.equals(selItem) %>" value="<%=item%>"><%=item%></aui:option>
<%}%>
</aui:select>
お役に立てれば。