so rufen Sie eine java-Funktion von javascript und JSF
Ich bin mit JSF2.0 und versucht, rufen Sie eine java-Funktion von javascript, aber konnte nicht erreichen.
Ich habe eine jsp mit datatable, wo 2 meiner Spalten(Material-und Desc) abrufen von Daten aus dem popup jsp.Nun kann der Benutzer gibt Daten in 2 andere Felder(Einheit und Menge) unter Berücksichtigung dieser 4 als input-Parameter habe ich eine java-Funktion, die zurückgibt, die restlichen Werte (NetPrice und NetTax in meinem Beispiel)
Wie kann ich den Aufruf der java-Methode, die hier, so dass ich die Werte für meine jsp ' s(test.jsp) - text-Felder.Hier ist das code-snippet von meinem Weg
test.jsp
<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>
popup.jsp
<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>
Ich habe versucht, mit einem commandLink aber ich will es tun, wenn sich das textfield-Objekt verliert den Fokus oder ähnliches
- Das ist wirklich möglich. Nur die funktionale Anforderung ist ziemlich vage, so dass Ihre Frage ist nicht beantwortbar. Wann genau würden Sie gerne die JSF action-Methode? Wenn ein element ruft konzentrieren? Wenn ein element erhalten geklickt? Wenn ein element unscharf? Wenn der Benutzer geht Weg vom PC? Wenn der PC explodiert? Etc. Mehr Details bitte.
- Nettes nehmen :). Aber ich glaube, selbst das wäre ein AJAX-Aufruf, nicht wahr?
- OP ist mit JSF 2.0. Es sollte so einfach wie das einlegen einer
<f:ajax>
tag irgendwo. - Cent Prozent Zustimmung. In der Regel, seine guter, um zu beschreiben, was passiert hinter den kulissen. Zum Beispiel, nur weil die JSP eine tag-ähnliche Sprache, einige Leute denken, dass es läuft auf client, und verwirren JSP mit JavaScript sehr oft.
- Sorry meine Frage war unvollständig, wenn gepostet...ich hab es jetzt bearbeitet es richtig..bitte helfen Sie mir aus jetzt..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier Ereignis kann Ihre Wahl sein, wie
Weichzeichnen,ändern,keyup,keydown
etc.........
Listener die Methode zu sein
wird aufgerufen, wenn das jeweilige event
ausgelöst.
Hier caluclate ist die Methode
aus der Logik zu füllen
die restlichen Felder in Ihrer jsp.
Ihre Backing-Bean
Können Sie nicht. Die meisten Sie tun können, ist, um eine AJAX-Anfrage. Ähnliche Frage wurde hier beantwortet, Wie auf ein java-Objekt im javascript-Code von JSP?