这是我的情况:
我想测试是否无论如何链接java bean和xhtml,所以我使用richfaces,a4j:jsFunction来处理它。
我成功 - 在某种程度上,事件发起人必须在表格外面开火,所以WEIRD !!
我的代码中有3个部分:xhtml,js,java
XHTML:
<button id="succeed" onclick="showMessage()"> succeed_test </button>
<!-- this is the succeeded button -->
<h:form id="form1" prependId="true" >
<button id="fail" onclick="showMessage()"> fail_test </button>
<!-- this is the failed button -->
<a4j:jsFunction
name="showMessage"
data="#{javaBeanTest.showThings()}"
oncomplete="presentData(data)"
immediate="true" />
</h:form>
JS:
function presentData(data){
alert(data);
}
的java:
@Name("javaBeanTest")
public class JavaBeanTest implements Serializable{
public boolean showThings(){
System.out.println("--JavaBeanTest.showThings()");
return true;
}
}
单击“succeed_test”按钮时,我在控制台上收到了“true”警告和“--JavaBeanTest.showThings()”,但在控制台上只有“undefined”警告和“--JavaBeanTest.showThings()”点击“fail_test”按钮。
显然,差异在形式的内部或外部.....
疑惑!!!!请!!!“
在我的richfaces版本中,它与“数据”而不是“event.data”一起使用,应该是3.x
JDK 1.6
JBDS 4.1.0GA
接缝2.2
JSF 1.2
答案 0 :(得分:0)
在您的情况下,如果表单位于一个表单内,则HTML按钮会提交表单(行为可能因浏览器而异)。您需要明确指定按钮类型或阻止默认提交行为,例如:
<button id="fail" type="button" onclick="showMessage()">does not fail anymore</button>
或
<button id="fail" onclick="showMessage(); return false;">does not fail anymore</button>
W3C建议始终指定type属性:
提示:始终指定元素的type属性。 不同的浏览器可能使用不同的默认类型 元件。