编辑
好像这里有点混乱,我们试着说清楚:
从浏览器触发与服务器的通信基本上有三种方式:
- 提交 HTML
- 提交JS
- AJAX 提交
您可能关心也可能不关心为禁用 JavaScript 浏览的用户提供支持;
- 如果您不关心,那么您可以按照自己的意愿进行;
- 如果您确实关心,那么您面前有两种方法:
- 制作页面的独特版本,无论是否使用 JS(仅使用选项“1”、“提交 HTML”);
- 使页面以两种可能的方式工作,互斥:在处理页面时,您检测用户是否启用了 javascript:如果是,则使用 JS(提交或 AJAX),如果不是,则回退到非 JS 解决方案( “提交 HTML”)。
这两种解决方案都可以使用和不使用 JS,但通常首选后者,因为您可以通过使用 JavaScript 并最终使用 AJAX 为 99% 的用户设置一个漂亮、美观、面向用户体验的 WebApp,并创建为 1% 的用户提供的后备解决方案,即使网站不像 JS 版本那样好,即使它没有 JS 版本的所有功能,它仍然可以使用,并且核心功能将可用。
正如我在上面的评论中所说,WebApp 的后备版本不需要像 JS 版本一样好、一样快、一样好用户体验:它应该简单地......工作。
例如,这个 JSP 在两种情况下都可以工作:如果启用 JS,它将在从 Select 中选择一个元素后执行 JavaScript 提交;如果 JS 禁用,它将在按下提交按钮后执行提交。
禁用 JS 后,onchange 将被忽略并<noscript>
处理。
启用 JS 后,onchange 将被处理并<noscript>
忽略。
<s:form action="myAction">
<s:select onchange="javascript:document.forms[0].submit();"
name="test1" value="test1" list="{'A','B','C'}" />
<s:textfield name="test2" value="test2" />
<noscript>
<span>
Since you have JS disabled,
you need to manually press to the GO button,
but you still can make it work ;)
</span>
<s:submit value="go" />
</noscript>
</s:form>
在你的行动中
public class MyAction extends ActionSupport{
private String test1="";
private String test2;
/* Getters and Setters */
public String execute(){
if (test1.length()>0)
assignValues();
return SUCCESS;
}
private void assignValues(){
if (test1.equals("A")){
test2 = "A was chosen, do something";
} else if (test1.equals("B")){
test2 = "B was chosen, do something else";
} else if (test1.equals("C")){
test2 = "C was chosen, what's next?";
}
}
}
您在评论中表达的其他疑问表明您可能想退后一步并阅读一些 Struts2 教程,以确保从框架中获得最大收益。
如果您不想影响同一表单中的其他字段,只需在操作中声明一个变量(使用 Getter 和 Setter),为它们中的每一个:它们将保留在重新加载的页面中,因为它们将与提交一起发送(因为它们在表单中),它们将通过 Setter 注入,它们将通过 Getter 读回并通过匹配它们的名称和 Action 变量注入新页面。
否则你可以使用 AJAX,但我会从这里开始。
不,你不能嵌套表格。