从Java函数向JS/JQuery函数赋值/传递值

Assigning/Passing value from Java function to JS/JQuery function

本文关键字:函数 赋值 JQuery JS Java      更新时间:2023-09-26

假设我有一个类似的Java函数

public int getNumber(){
}

它根据其逻辑返回一些值。我有一个类似的JS文件

Tapestry.Validator.amountValidator = function(field, message) {
    field.addValidator(function(value) {
        if (value != null) {
          // code here
            }
        }
    });
};

现在我在问自己,在JS或JQuery中,是否可以将Java函数的值传递给JS中的函数(值)?如果可以,如何实现?

更新:正如abalos的回答所建议的,Tap for我自己已经完成了4个阶段中的3个。我正在提供一个处理服务器端及其背后逻辑的功能。

   @InjectComponent
    private TextField amount;
    @Inject
    private FieldValidatorSource fieldValidatorSource;
    public FieldValidator<?> getAmountValidator() 
     {
        return fieldValidatorSource.createValidators(amount, "required,max=" + getBroj());
    }

现在,这里的验证器是从函数getBroj()中的一个逻辑中获取的,这是它所获取的最大数量。这在服务器端就像一个魅力。现在我在想,我所没有的(使用我的逻辑)只是客户端,我可以通过从Tapestry更新当前的Validation类来实现它,该类将处理该类已知的这种请求。要做到这一点,我需要调用一个js文件,其中有一个函数调用上面的例子,但我不太确定如何将值从getNumber()函数传递到上面的js函数。

在Tapestry中调用方法根本不需要Jersey、DWR或任何其他框架。你只需要适当地提出你的问题。

final private static String EVENT_NAME = "whateverEventNameYouWant";
@Inject
private ComponentResources resources;
@Inject
private JavaScriptSupport javaScriptSupport;
/** Method that will provide the value you want to pass to JS. */
@OnEvent(EVENT_NAME) 
public JSONObject provideValue() {
    JSONObject object = new JSONObject();
    object.put("value", /* the value you want to pass to JS */);
    // other values you may want to pass
    return object;
}
void afterRender() {
    // This creates an URL for the event you created. Requesting it will
    // invoke any event handler methods for that event name.
    Link link = resources.createEventLink(EVENT_NAME);
    javaScriptSupport.addScript("var eventUrl = '%s';", link.); // the JavaScript variable name doesn't matter. You can choose any you want
}

然后,在您的JavaScript中,使用eventUrl变量中的URL执行AJAX请求。我将把这一部分留给您从jQuery文档中了解。接收到的数据正是您将在事件处理程序方法中返回的JSONObject或JSONArray。

我认为您对Java和jQuery/Javascript的语言类型有一些非常严重的误解。首先,除了node.js之外,jQuery/Javascript用于客户端操作。Java用于服务器端操作。这意味着您需要将一个值从服务器传递给客户端。

现在,您所要求的最初看起来像是在尝试执行验证。这不应该只在客户端上完成。有一些方法可以绕过客户端验证,最好将客户端的信息保持在"不受信任"状态,直到在服务器上进行验证。

话虽如此,要想完成您想要做的事情,需要使用某种方法让客户端与服务器进行通信。我最喜欢的简单操作方式是通过web服务。

以下是您需要的步骤,但请注意,这不是唯一的方法

  1. 使用Jersey创建web服务
  2. 通过AJAX将值传递给web服务,其中包含JSON或XML以及包含该值的请求
  3. 使用服务中的信息在服务器端执行验证
  4. 将rest服务的响应传递回客户端AJAX调用,并将其用于JS/jQuery代码

如果你有任何问题,请告诉我。