3
作爲對Ajax請求的響應,我想要立即返回在客戶端上執行的Javascript。 我試過這樣,但它不工作:如何將Javascript作爲部分響應返回?
<html xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head></h:head>
<h:body>
<h:form>
<h:commandButton value="js">
<f:ajax event="click" listener="#{myBean.js}"/>
</h:commandButton>
</h:form>
</h:body>
</html>
豆:
package mypackage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.context.PartialResponseWriter;
import javax.inject.Named;
@Named
public class MyBean {
public void js() {
System.out.println("called");
FacesContext ctx = FacesContext.getCurrentInstance();
ExternalContext extContext = ctx.getExternalContext();
if (ctx.getPartialViewContext().isAjaxRequest()) {
try {
extContext.setResponseContentType("text/xml");
extContext.addResponseHeader("Cache - Control ", "no - cache");
PartialResponseWriter writer = ctx.getPartialViewContext()
.getPartialResponseWriter();
writer.startDocument();
writer.startEval();
writer.write("alert(’Works!’);");
writer.endEval();
writer.endDocument();
writer.flush();
ctx.responseComplete();
} catch (Exception e) {
System.out.println(e);
}
}
}
}
響應將是Javascript文本。你需要通過它,評估它。 但這將是危險的,爲什麼不只是從JSON獲取明確的數據,並基於此做一些事情,並保持Java腳本在客戶端? –
@Amogh:如果它包含內聯的用戶控制輸入,那將是危險的。目前,它只是在服務器中進行硬編碼。 – BalusC