Ket*_*tan 3 java jsf richfaces
我的代码如下,
<a4j:commandLink oncomplete="openSignatureModel();" id="requestText" reRender="sigPassword" title="Send Prescription"
actionListener="#{patientNotePresBackingBean.sendPrescriptionId}"
onclick="return pharmacyCheck('#{row}');">
<f:param name="sendPrescriptionId" value="#{patientNotePrescriptionVar.id}" />
<f:param name="processOfPrescription" value="Send" />
<h:graphicImage value="/images/send-prescribe.png" style="border:0;"></h:graphicImage>
</a4j:commandLink>
Run Code Online (Sandbox Code Playgroud)
我的java脚本就像......
function pharmacyCheck(rowID) {
var a = document.getElementById("prescriptionId:patientNotePresListId:"+rowID+":pharmacyRcopiaId");
if(a.value == -1) {
alert("Please select Pharmacy");
return false;
} else {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
实际上当它返回true时它应该调用patientNotePresBackingBean.sendPrescriptionId 对吗?
但它没有相同的说法......有什么理由吗?
当您看到生成的HTML时,类似这样的内容将出现在按钮/链接的onclick方法中:
onclick="return pharmacyCheck('#{row}');;A4J.AJAX.Submit(..."
Run Code Online (Sandbox Code Playgroud)
因此onclick在开始时返回,并且不会发送ajax提交.要解决您的问题,请以这种方式使用您的javascript方法:
<a4j:commandLink onclick="if (!pharmacyCheck('#{row}')) return false;" ...>
Run Code Online (Sandbox Code Playgroud)
编辑:进一步说明:
如果你有这样的JavaScript代码:
function X() {
return false;
alert("this alert won't be shown =(");
}
Run Code Online (Sandbox Code Playgroud)
正如明确指出的那样,警报永远不会开火.因此,检查生成的onclick HTML(特殊格式化以查看相似之处):
onclick="
return functionX();
alert('this alert will not display either X_x');
A4J.AJAX.Submit(...
"
Run Code Online (Sandbox Code Playgroud)
onclick代码不会触发,因为您在执行代码之前返回了一些内容.更改将仅截取false值并返回,如果您的方法返回true,其余代码将被执行.
注意:默认情况下,任何不返回任何内容的javascript方法都会返回false.