在Oracle ADF 12c中,.jsf页面通常与后端的Java代码(如Managed Bean或Backing Bean)进行交互。要从.jsf页面中的JavaScript函数获取返回值并将其传递给后端的Java代码,可以使用以下几种方法:
方法一:使用JavaScript和ADF Faces的客户端事件
你可以使用JavaScript在客户端执行操作,然后通过ADF Faces的客户端事件将结果传递给后端的Managed Bean。
步骤:
- 在.jsf页面中定义JavaScript函数:
- <af:resource type="javascript"> function getValueFromJS() { // 这里是你的JavaScript逻辑 var value = "some value"; // 这是你要返回的值 return value; } </af:resource>
- 在.jsf页面中定义一个隐藏的输入框和按钮:
- <af:inputText id="hiddenInput" value="#{backingBean.hiddenValue}" visible="false"/> <af:commandButton id="hiddenButton" actionListener="#{backingBean.processValue}" visible="false"/>
- 在.jsf页面中定义一个JavaScript函数来调用后端方法:
- <af:resource type="javascript"> function callBackend() { var value = getValueFromJS(); var hiddenInput = AdfPage.PAGE.findComponentByAbsoluteId('hiddenInput'); hiddenInput.setValue(value); var hiddenButton = AdfPage.PAGE.findComponentByAbsoluteId('hiddenButton'); hiddenButton.click(); } </af:resource>
- 在.jsf页面中触发JavaScript函数:
- <af:commandButton text="Get Value" onclick="callBackend(); return false;"/>
- 在Managed Bean中处理值:
- @ManagedBean @RequestScoped public class BackingBean { private String hiddenValue; public String getHiddenValue() { return hiddenValue; } public void setHiddenValue(String hiddenValue) { this.hiddenValue = hiddenValue; } public void processValue(ActionEvent actionEvent) { // 处理从JavaScript传递过来的值 System.out.println("Value from JavaScript: " + hiddenValue); } }
方法二:使用ADF Faces的JavaScript API和Partial Page Rendering (PPR)
你可以使用ADF Faces的JavaScript API和Partial Page Rendering (PPR)来更新页面组件并将值传递给后端。
步骤:
- 在.jsf页面中定义JavaScript函数:
- <af:resource type="javascript"> function getValueFromJS() { // 这里是你的JavaScript逻辑 var value = "some value"; // 这是你要返回的值 return value; } </af:resource>
- 在.jsf页面中定义一个隐藏的输入框:
- <af:inputText id="hiddenInput" value="#{backingBean.hiddenValue}" visible="false"/>
- 在.jsf页面中定义一个JavaScript函数来更新隐藏输入框的值并触发PPR:
- <af:resource type="javascript"> function updateBackend() { var value = getValueFromJS(); var hiddenInput = AdfPage.PAGE.findComponentByAbsoluteId('hiddenInput'); hiddenInput.setValue(value); AdfPage.PAGE.queueEvent(new AdfCustomEvent(hiddenInput, "valueChange", null, false)); } </af:resource>
- 在.jsf页面中触发JavaScript函数:
- <af:commandButton text="Get Value" onclick="updateBackend(); return false;"/>
- 在Managed Bean中处理值:
- @ManagedBean @RequestScoped public class BackingBean { private String hiddenValue; public String getHiddenValue() { return hiddenValue; } public void setHiddenValue(String hiddenValue) { this.hiddenValue = hiddenValue; } public void processValue(ValueChangeEvent valueChangeEvent) { // 处理从JavaScript传递过来的值 System.out.println("Value from JavaScript: " + hiddenValue); } }
总结
通过以上方法,你可以在Oracle ADF 12c中从.jsf页面的JavaScript函数获取返回值并将其传递给后端的Managed Bean。方法一使用了隐藏的输入框和按钮来传递值,而方法二则使用了ADF Faces的JavaScript API和Partial Page Rendering (PPR)来更新页面组件并触发后端处理。选择哪种方法取决于你的具体需求和应用场景。