【问题标题】:Assigning/Passing value from Java function to JS/JQuery function将值从 Java 函数分配/传递给 JS/JQuery 函数
【发布时间】:2014-10-24 11:40:38
【问题描述】:

假设我有一个类似的 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 已经完成了 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 函数。

【问题讨论】:

  • 你不知道 ajax 和 DWR?

标签: java javascript jquery tapestry


【解决方案1】:

您根本不需要 Jersey 或 DWR 或任何其他框架来调用 Tapestry 中的方法。你只需要正确地提出你的问题。

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。

【讨论】:

    【解决方案2】:

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

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

    话虽如此,要执行您尝试执行的操作,需要使用某种方法让客户端与服务器进行通信。对于简单的操作,我最喜欢的方法是通过 Web 服务。

    以下是执行所需操作的步骤,但请注意,这不是唯一的方法。

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

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

    【讨论】:

    • 嘿,很好的答案。 Tap for 我自己执行所有 1. 2. 和 3. 所以我不必处理它。我将更新我的答案,以更好地得出我在这里想要达到的目标,即第 4 位。
    • @true 听起来不错。我对 Tapestry 框架不是很熟悉,但我很高兴能够帮助您开始做一些事情。
    • 发帖人首先在 Tapestry 用户邮件列表中问过这个问题,所以这个问题实际上是 Tapestry 特有的,即使描述也没有说明这一点。
    • @ThiagoH.dePaulaFigueiredo 问题被标记为“tapestry”
    猜你喜欢
    • 1970-01-01
    • 2013-06-25
    • 2013-08-08
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多