假设我有一个类似
的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函数。
答案 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服务。
以下是执行所需操作的步骤,但请注意,这不是唯一的方法。
如果您有任何问题,请与我们联系。