java - Struts 1 动态设置action的输入属性

标签 java struts struts-1

我正在使用 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/

相关文章:

java - 如何根据 struts session 变量拥有动态 css 文件

java - 这个代码段的增长顺序是什么?稍微解释一下

java - 在Java中选择文件夹目标?

java - 在jsp页面中做request.setAttribute,在java代码中做request.getAttribute

java - 如何验证html :options collection in Struts 1. 3?

java - 在我的 jsp 中使用 arraylist 的属性与 struts-bean.tld

java - ActionError 消息未显示在 UI 中

java - 为填字游戏创建 GUI 的最佳方法是什么? java

java - Android - fragment findViewById() 始终为空?

java - JSP Struts 到 Velocity Struts 的转换