我正在使用 Struts 1 开发一个 Java 库项目(我知道它很旧,但这是一个学校项目)。
我创建了一个 DispatchAction 来处理带有 op 参数的不同方法(添加、编辑、删除)的 Book 请求。
add 方法工作正常,因为它有像/book.do?op=add 这样的 url,但是 edit 对于像 book.do?op=edit&id=1 这样的动态 url 有一个概念问题:
if the validation find some errors, how can the action know where redirect? The input attribute is static, but the page that sends the request has a dynamic url.
我的 struts-config.xml 中有这个:
<!-- Base Book Action -->
<action path="/book" type="com.github.jcpp.jathenaeum.actions.BookAction" parameter="op">
<forward name="add" path="page.addBook"/>
<forward name="edit" path="page.editBook"/>
<forward name="delete" path="page.deleteBook"/>
<forward name="viewAll" path="page.viewAllBooks"/>
<forward name="noAuthors" path="page.noAuthors" />
</action>
<!-- Action Book -->
<action
path="/doBook"
type="com.github.jcpp.jathenaeum.actions.BookActionDo"
name="bookForm"
scope="request"
validate="true"
parameter="op">
<forward name="add" path="page.confirmBookInsert"/>
<forward name="edit" path="page.confirmBookInsert"/>
<forward name="success" path="page.confirmBookInsert"/>
<forward name="failed" path="page.failedBookInsert"/>
</action>
我想知道的是:这是做这种事情的最好方法吗?或者有更简单的方法吗?
我可以动态设置输入属性的值吗?
如果您愿意,可以在 GitHub 上查看整个项目代码:https://github.com/JCPP/JAthenaeum
更新1
我的问题是在验证后重定向到这样的动态网址:book.do?op=edit&id=1。您可以更改的书可以有不同的 ID(29、50、49)。本例中的输入属性很窄。
谢谢
最佳答案
我认为您无法动态更改输入属性的值。
当您的表单提交但验证失败时,它会被重定向到 "input"
属性中定义的页面。
我认为不需要动态更改“输入”属性。当验证失败时,您可以将其重定向回用户输入数据的同一页面,并显示错误消息,显示无效字段。
当您输入无效数据时,您可以在网站的任何“注册/登录”页面中看到这种行为。
编辑
这是一个解决方法。在映射文件中设置 validate="false"
。并从您的操作类中调用验证方法。
您还可以更改验证方法的返回类型以满足您的需要(例如字符串)。
因此,在您的操作类中,根据 validate 方法返回的值,您可以创建不同的 url 并将其转发到那里:
public class MyAction extends DispatchAction{
public ActionForward add(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response,
ActionMessages messages) throws Exception
MyForm myForm = (MyForm) form;
String url="";
String result = form.validate();
if(result.equals("something")){
url="book.do?op=add&id=" + book.getId();
}else if(result.equals("somethingElse"){
url="book.do?op=edit&id=" + book.getId();
}
RequestDispatcher rd = request.getSession().getServletContext().getRequestDispatcher(url);
rd.forward(request, response);
}
关于java - Struts 1 动态设置action的输入属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21561576/