将值从Java函数分配/传递给JS / JQuery函数

时间:2014-10-24 11:40:39

标签: java javascript jquery tapestry

假设我有一个类似

的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 my已经完成了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函数。

2 个答案:

答案 0 :(得分:3)

您根本不需要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。

答案 1 :(得分:2)

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

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

尽管如此,要做你想做的事情,还是需要使用一些方法让客户端与服务器进行通信。我最喜欢的简单操作方法是通过Web服务。

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

  1. 使用Jersey创建网络服务。
  2. 使用JSON或XML通过AJAX将值传递给Web服务,请求包含该值。
  3. 使用服务中的信息在服务器端执行验证。
  4. 将来自其他服务的响应传递回客户端AJAX调用,并将其用于JS / jQuery代码。
  5. 如果您有任何问题,请与我们联系。