我知道这不可能将参数从javascript传递到jsp页面中的scriptlet代码,所以我想使用ajax将所选值发布到服务器,然后通过我使用的请求对象以scriptlet代码获取它
<aui:select label="My Selection" name="ms" id="ms" onchange="<%= updateItem()%>" > <% for(String item : itemList){ %> <aui:option selected="<%= item.equals(selItem) %>" value="<%=item%>"><%=item%></aui:option> <%}%> </aui:select> <%! private Object updateItem() throws Exception{ //to do something with selected value return null; }%>
请告诉我如何在此标记中执行ajax帖子,或者在我的情况下可以使用任何标记
您似乎根本没有意识到HTTP和Web应用程序是如何工作的。您必须了解请求/响应周期。
AJAX对您来说是您想做的事情的正确名称,但是正如名称所言,AJAX是异步 JavaScript- 您尝试将java方法调用放在onchange属性中。这行不通。
要首先执行您要的操作,您必须找到您的Portlet类,并实现serveResource(ResourceRequest req, ResourceResponse resp) 方法,在该方法中您将收到选定的值(String selectedVal = req.getParameter("selectedVal")),并根据该值返回一些值。
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>
希望这可以帮助。