Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将值从Java函数分配/传递到JS/JQuery函数_Java_Javascript_Jquery_Tapestry - Fatal编程技术网

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

将值从Java函数分配/传递到JS/JQuery函数,java,javascript,jquery,tapestry,Java,Javascript,Jquery,Tapestry,假设我有一个Java函数,比如 public int getNumber(){ } Tapestry.Validator.amountValidator = function(field, message) { field.addValidator(function(value) { if (value != null) { // code here } } }); }; 根据它的逻辑返回一些值

假设我有一个Java函数,比如

public int getNumber(){

}
Tapestry.Validator.amountValidator = function(field, message) {

    field.addValidator(function(value) {
        if (value != null) {
          // code here
            }
        }
    });

};
根据它的逻辑返回一些值。我有一个JS文件,比如

public int getNumber(){

}
Tapestry.Validator.amountValidator = function(field, message) {

    field.addValidator(function(value) {
        if (value != null) {
          // code here
            }
        }
    });

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

更新:根据abalos的回答,Tap for If已经完成了4个阶段中的3个。我提供了一个处理服务器端及其背后逻辑的函数

   @InjectComponent
    private TextField amount;
    @Inject
    private FieldValidatorSource fieldValidatorSource;

    public FieldValidator<?> getAmountValidator() 
     {
        return fieldValidatorSource.createValidators(amount, "required,max=" + getBroj());
    }
@InjectComponent
私有文本字段数量;
@注入
私有FieldValidatorSource FieldValidatorSource;
公共字段验证器getAmountValidator()
{
return fieldValidatorSource.createValidators(amount,“required,max=“+getBroj());
}

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

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

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

综上所述,要完成您试图完成的任务,需要使用某种方法让客户端与服务器通信。对于简单的操作,我最喜欢的方法是通过web服务

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

  • 使用创建web服务
  • 通过带有JSON或XML的AJAX将值传递给web服务,请求中包含该值
  • 使用来自服务的信息在服务器端执行验证
  • 将rest服务的响应传递回客户端AJAX调用,并将其用于JS/jQuery代码

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

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

    您不知道ajax和DWR吗?回答得好。为我自己点击执行所有1。2.三,。所以我不必处理它。我将更新我的答案,以便更好地总结我在这里要实现的目标,即第4条。@true听起来不错。我对Tapestry框架不太熟悉,但我很高兴能够帮助您开始学习。海报首先在Tapestry用户邮件列表中询问了这一点,因此这个问题实际上是Tapestry特有的,即使描述没有说明这一点。@ThiagoH.dePaulaFigueiredo问题被标记为“Tapestry”