当事件启动器在表单内时,jsFunction的数据是未定义的

时间:2013-11-21 07:41:24

标签: javascript jsf richfaces

这是我的情况:
我想测试是否无论如何链接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

1 个答案:

答案 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属性。   不同的浏览器可能使用不同的默认类型   元件。

请参阅:http://www.w3schools.com/tags/att_button_type.asp