如何使用JSF从javascript调用java函数
我正在使用JSF2.0并试图从javascript调用java函数,但未能实现这一点。 我有一个带有datatable的jsp,其中我的两个列(Material和Desc)从弹出的jsp中获取数据。现在用户在另外两个字段(Unit和Qty)中输入数据,将这4个字段作为输入参数,我有一个java函数,返回其余的值(在我的示例中是NetPrice和NetTax) 我如何在这里调用java方法,以便获得jsp(test.jsp)文本字段的值 test.jsp如何使用JSF从javascript调用java函数,java,javascript,jsf,jakarta-ee,Java,Javascript,Jsf,Jakarta Ee,我正在使用JSF2.0并试图从javascript调用java函数,但未能实现这一点。 我有一个带有datatable的jsp,其中我的两个列(Material和Desc)从弹出的jsp中获取数据。现在用户在另外两个字段(Unit和Qty)中输入数据,将这4个字段作为输入参数,我有一个java函数,返回其余的值(在我的示例中是NetPrice和NetTax) 我如何在这里调用java方法,以便获得jsp(test.jsp)文本字段的值 test.jsp 函数TestPrevibling(按钮元
函数TestPrevibling(按钮元素){
试一试{
//警报(按钮元素);
var inputText=buttonElement.previousSibling;
while(inputText.nodeType!=1)
{
inputText=inputText.previousSibling;
}
//警报(inputText.id);
返回inputText.id;
}捕获(ex){
警报(“坏”+ex);
}
}
函数testNextSibling(按钮元素){
试一试{
//警报(按钮元素);
var inputText=buttonElement.nextSibling;
while(inputText.nodeType!=1)
{
inputText=inputText.nextSibling;
}
//警报(“下一个同级-->”+inputText.innerHTML);
返回输入文本;
}捕获(ex){
警报(“坏”+ex);
}
}
//var输入;
功能弹出窗口(URL、按钮REF){
var inputId=testprevisibling(buttonRef);
//警报(输入);
日期=新日期();
id=day.getTime();
URL=URL+“?inputId=“+inputId;
评估(“页面”+id+”=窗口。打开(URL,“+id+”,“工具栏=0,滚动条=0,位置=1,状态栏=0,菜单栏=0,可调整大小=1,宽度=250,高度=800左=630,顶部=502”);
}
函数getDetails(inputId、matVal、desc){
var inputRef=document.getElementById(inputId);
var tdRef=inputRef.parentNode;
var tdNextRef=测试下一步启用(tdRef);
//警报(“td Ref-->”+tdRef+“td next Ref-->”+tdNextRef);
var descRef=tdNextRef.firstChild;
//警报(“子参考-->”+descRef);
//警报(“当前JSP-->”+matVal+“输入Id-->”+inputId+“desc-->”+desc);
document.getElementById(inputId).value=matVal;
descRef.value=desc;
}
JSP页面
popup.jsp
函数testNextSibling(按钮元素){
试一试{
//警报(按钮元素);
var inputText=buttonElement.nextSibling;
while(inputText.nodeType!=1)
{
inputText=inputText.nextSibling;
}
警报(“下一个同级-->”+inputText.innerHTML);
返回inputText.innerHTML;
}捕获(ex){
警报(“坏”+ex);
}
}
功能gup(名称)
{
名称=名称。替换(/[\[]/,“\\\[”)。替换(/[\]]/,“\\\]”);
var regexS=“[\\?&]”+name+“=([^&\\]*)”;
var regex=新的RegExp(regexS);
var results=regex.exec(window.location.href);
如果(结果==null)
返回“”;
其他的
返回结果[1];
}
函数setMaterialValue(mat、matNum){
//警报(“mat”+mat);
var desc=测试下一步筛选(mat);
//警报(“说明-->”+desc);
var inputId=gup(“inputId”);
window.opener.getDetails(inputId、matNum、desc);
//window.opener.document.getElementById(mat).value;
window.close();
}
JSP页面
我尝试过使用commandLink,但我希望在文本字段失去焦点或类似的情况下使用它,但你不能。您最多可以做的就是发出AJAX请求。这里也回答了类似的问题,这确实是可能的。只有功能需求非常模糊,因此您的问题无法回答。您希望何时调用JSF操作方法?当某个元素检索焦点时?当某个元素被单击时?当某些元素变得模糊时?当用户离开
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script LANGUAGE="JavaScript">
function testPrevSibling(buttonElement) {
try {
// alert(buttonElement);
var inputText = buttonElement.previousSibling;
while (inputText.nodeType!=1)
{
inputText =inputText.previousSibling;
}
// alert(inputText.id);
return inputText.id;
} catch(ex) {
alert("bad " + ex);
}
}
function testNextSibling(buttonElement) {
try {
// alert(buttonElement);
var inputText = buttonElement.nextSibling;
while (inputText.nodeType!=1)
{
inputText =inputText.nextSibling;
}
// alert("next sibling-->"+inputText.innerHTML);
return inputText;
} catch(ex) {
alert("bad " + ex);
}
}
// var inputId;
function popUp(URL,buttonRef) {
var inputId = testPrevSibling(buttonRef);
// alert(inputId);
day = new Date();
id = day.getTime();
URL = URL+"?inputId="+inputId;
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=1,statusbar=0,menubar=0,resizable=1,width=250,height=800 left = 630,top = 502');");
}
function getDetails(inputId,matVal,desc){
var inputRef = document.getElementById(inputId);
var tdRef = inputRef.parentNode;
var tdNextRef = testNextSibling(tdRef);
// alert("td Ref-->"+tdRef+"td next Ref-->"+tdNextRef);
var descRef = tdNextRef.firstChild;
// alert("Child ref-->"+descRef);
// alert("Current JSP-->"+matVal+"input Id-->"+inputId+"desc-->"+desc);
document.getElementById(inputId).value = matVal;
descRef.value = desc;
}
</script>
<title>JSP Page</title>
</head>
<body>
<f:view>
<h:form>
<br>
<h:panelGrid bgcolor="#9AC8E6" width="100%">
<h:dataTable id="d" value="#{SalesCreate.orderBean.itemList}" var="iBean" bgcolor="#9AC8E6" border="10" cellpadding="5" cellspacing="3" rows="10" width="100%" dir="LTR" frame="hsides" rules="all" >
<h:column>
<f:facet name="header">
<h:outputText style=""value="Material" />
</f:facet>
<h:inputText id="mat" value="#{iBean.material}" > </h:inputText>
<h:commandButton value="..." onclick="javascript:popUp('MaterialList.jsp',this)" > </h:commandButton>
<h:commandButton style="display:none" value="..." onclick="" > </h:commandButton>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText style=""value="Description" />
</f:facet>
<h:inputText id="desc" value="#{iBean.description}" > </h:inputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText style=""value="Unit" />
</f:facet>
<h:inputText value="#{iBean.unit}" > </h:inputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText value="Quantity"/>
</f:facet>
<h:inputText value="#{iBean.quantity}"> </h:inputText>
<h:form>
<h:commandLink value="get Pricing" action="#{SalesCreate.pricingForQuotation}" >
<f:param name="mat" value="#{iBean.material}" />
<f:param name="unt" value="#{iBean.unit}" />
<f:param name="qty" value="#{iBean.quantity}" />
</h:commandLink> </h:form>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText style=""value="Unit Price" />
</f:facet>
<h:inputText value="#{iBean.netPrice}" > </h:inputText>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText style=""value="Total Price" />
</f:facet>
<h:inputText value="#{iBean.netTax}" > </h:inputText>
</h:column>
</h:dataTable>
</h:panelGrid>
</h:form>
</f:view>
</body>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script LANGUAGE="JavaScript">
function testNextSibling(buttonElement) {
try {
// alert(buttonElement);
var inputText = buttonElement.nextSibling;
while (inputText.nodeType!=1)
{
inputText =inputText.nextSibling;
}
alert("next sibling-->"+inputText.innerHTML);
return inputText.innerHTML;
} catch(ex) {
alert("bad " + ex);
}
}
function gup( name )
{
name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
var regexS = "[\\?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if( results == null )
return "";
else
return results[1];
}
function setMaterialValue(mat,matNum){
// alert("mat " + mat);
var desc = testNextSibling(mat);
// alert("Description-->"+desc);
var inputId = gup("inputId");
window.opener.getDetails(inputId,matNum,desc);
// window.opener.document.getElementById(mat).value;
window.close();
}
</script>
<title>JSP Page</title>
</head>
<f:view>
<body>
<h:dataTable id="datatbl" value="#{SalesCreate.inquiryMaterialList}" var="materialList" bgcolor="#9AC8E6" border="10" cellpadding="5" cellspacing="3" rows="3000" width="100%" dir="LTR" rules="all">
<h:column>
<f:facet name="header">
<h:outputText style=""value="Material" />
</f:facet>
<h:form>
<h:commandLink style="" id="materialId" value="#{materialList.material}" onclick="javascript:setMaterialValue(this,#{materialList.material})" ></h:commandLink>
<h:outputText style="display:none" value="#{materialList.description}"></h:outputText>
</h:form>
</h:column>
<h:column>
<f:facet name="header">
<h:outputText style=""value="Description" />
</f:facet>
<h:form>
<h:commandLink style="" value="#{materialList.description}" onclick="javascript:setDescriptionValue(#{materialList.description})" ></h:commandLink></h:form>
</h:column>
</h:dataTable>
</body>
</f:view>
<h:inputText value="#{yourbackingBean.first}">
<f:ajax event="blur" render="cm" listener="#{yourbackingBean.caluculate}"/>
</h:inputText>
h:inputText value="#{yourbackingBean.second}" id="cm"/>
</h:form>
private int first=1;
private int second=1;
//Getters and Setters
public void caluculate(AjaxBehaviorEvent evt)
{
second=first*1000;
}