【问题标题】:Is it possible to use jQuery selectors to access Struts2 elements without a plugin?是否可以使用 jQuery 选择器在没有插件的情况下访问 Struts2 元素?
【发布时间】:2012-05-07 20:48:22
【问题描述】:

我是 Struts2 的新手,但我一直遇到 jQuery 选择器无法访问我们在 jsps 中定义的任何 Struts2 标记的问题。

我假设如果没有大量自定义代码或插件,它们不会集成,但我无法找到任何明确的书面资料。当我访问strut2-jQuery plugin 页面时,他们提到最好在他们的常见问题解答中使用插件,但不是必需的。

我在这里遗漏了什么吗?如果我有一个元素的 struts2 标记并尝试使用 jQuery 选择它,它似乎不起作用。我说的是基本元素,例如

$('form').find(':input').change(function() { ...  //or

$('#testbutton').attr('disabled', true);  //or

 $('#formName').change(function() { 
          alert("Found form!"); 
     });

因此,当我查看查看源代码时,我看到了从标签生成的常规 html 代码,如果它来自 struts2 标签而不是具有相同 jQuery 的常规 html 标签,我无法使用选择器访问这些特定元素选择器代码。

另外一项,我在jsp页面上使用这样的东西来引用jQuery:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js" type="text/javascript"></script>

【问题讨论】:

  • struts 标签总是被转换成常规的 HTML 代码,所以这不是问题。检查生成的 HTML 代码,看看您在选择器中使用的 Id 是否与生成的 html 中的相同
  • 总是寻找显而易见的东西。我混合了 jsp 的不重新编译和随机丢失关闭 });当我添加一个新功能时。当我进行干净构建与重建时,更改开始起作用。

标签: jquery jsp struts2


【解决方案1】:

HTML 的生成方式与客户端(浏览器)无关,客户端对生成的 DOM 之外的任何内容一无所知。

如果有一个 ID,或者它是一个输入,jQuery 会找到它——我多年来一直使用纯 jQuery(和 Prototype)和 S2 应用程序没有问题。

还有一些问题。


已编辑以显示 JSP、呈现的 HTML 和控制台输出。

JSP:

<s:form action="simpleForm">
  <s:textfield name="fname"/>
  <s:submit value="Go!"/>
</s:form>

呈现的 HTML(假设默认 "xhtml" 主题):

<form id="simpleForm" name="simpleForm" action="/simpleForm.action" method="post">
  <table class="wwFormTable">
    <tr>
      <td class="tdLabel"></td>
      <td><input type="text" name="fname" value="" id="simpleForm_fname"/></td>
    </tr>

    <tr>
      <td colspan="2"><div align="right"><input type="submit" id="simpleForm_0" value="Go!"/>
      </div></td>
    </tr>
  </table></form>

一些控制台输出:

> $("form")
[<form id=​"simpleForm" name=​"simpleForm" action=​"/​simpleForm.action" method=​"post">​…​</form>​]
> $("form").find(":input")
[<input type=​"text" name=​"fname" value=​"d" id=​"simpleForm_fname">​, 
 <input type=​"submit" id=​"simpleForm_0" value=​"Go!">​]
> $("form").find("input") // Don't need the ":"
[<input type=​"text" name=​"fname" value=​"d" id=​"simpleForm_fname">​,
 <input type=​"submit" id=​"simpleForm_0" value=​"Go!">​]

【讨论】:

  • 好吧,我没看到它是什么?我发布的最后一个代码示例怎么样,如果我使用 struts 标记中的表单 ID,那不应该显示吗?
  • @JamesDrinkard 对渲染的 HTML 一无所知,似乎我只是在猜测。我不知道还能告诉你什么——客户端不知道关于服务器端所做的任何事情的任何事情,这是唯一重要的地方标签。我正在编辑以包含 JSP、呈现的 HTML 和 jQuery 命令的控制台输出。检查你的 JS 控制台,尝试手动选择器等——但同样——客户端不关心(或知道)HTML 是如何生成的,只关心它从呈现的 HTML 创建的 DOM。
  • 戴夫,看看我的最新更新。我想我错误地引用了 jQuery 来使用 Struts2。
  • @JamesDrinkard 正在加载吗?同样,它与 S2 无关——这是一个非常旧的版本,但您不需要使用 url 标签来访问绝对的、非应用程序的 url。
  • 是的,jQuery 和 Struts2 都是独立加载和工作的。我可以在 html 元素上运行 jQuery 代码,它工作正常。 Struts2 标记也可以按预期工作。我只是无法使用 struts2 id 或 jQuery 元素选择器或分配一个类来访问表单或它的元素,除了文本字段。这些是 jQuery 可以在表单上与之通信的唯一输入。
猜你喜欢
  • 1970-01-01
  • 2020-07-30
  • 2023-03-09
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多