Struts2 с тегом s: action - PullRequest
       7

Struts2 с тегом s: action

0 голосов
/ 13 апреля 2010

Вот небольшое тестовое приложение, которое выполняет следующие действия

  1. попросить пользователя ввести свое имя и отправить - (index.jsp)
  2. в результате index.jsp является страницей welcome.jsp, которая просит пользователя выбрать свою группу крови

index.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>   
<%@ taglib prefix="s" uri="/struts-tags" %>   
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
<html>   
  <head>   </head>   
   <body>   
    <form action="MyName">   
    <s:textfield name="UserName" label="Enter Your Name"/>   
    <s:submit/>   
    </form><br>   
  </body>   
</html>    

struts.xml

<?xml version="1.0" encoding="UTF-8" ?>   
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">   
<struts>   
<package name="module1" namespace="" extends="struts-default">   
<action name="MyName" class="module1.User">   
    <result>/Welcome.jsp</result>   
</action>   
<action name="Blood_Group" class="module1.SelectBloodGroup" method="bloodGroupList"/>   
</package>   

</struts>

SelectBloodGroup.java

package module1;   

import java.util.ArrayList;   
import com.opensymphony.xwork2.ActionSupport;   
public class SelectBloodGroup extends ActionSupport{   
    private ArrayList<BloodGroup> bglist;   

    public String bloodGroupList(){   
        bglist = new ArrayList<BloodGroup>();   
        bglist.add(new BloodGroup("1","A+"));   
        bglist.add(new BloodGroup("2","B+"));   
        bglist.add(new BloodGroup("3","AB+"));   
        bglist.add(new BloodGroup("4","O+"));   
        bglist.add(new BloodGroup("5","A-"));   
        bglist.add(new BloodGroup("6","B-"));   
        bglist.add(new BloodGroup("7","AB-"));   
        bglist.add(new BloodGroup("8","O-"));   
        return "SUCCESS";   
    }   

    public ArrayList<BloodGroup> getBglist(){   
        return bglist;   
    }   

}   
class BloodGroup{   
    private String id;   
    private String bg;   

    BloodGroup(String id,String bg){   
        this.id=id;   
        this.bg=bg;   
    }   

} 

welcome.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>   
<%@ taglib prefix="s" uri="/struts-tags" %>   
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
<html>   
  <head>   

  </head>   

  <body>   
    <s:action name="Blood_Group" executeResult="false"/>    

    //***************here is the problem***************   
    <s:select list="bglist" listKey="id" listValue="bg"/>   
   //***********************************************   

  </body>   
</html>   

Struts не может идентифицировать bglist как коллекцию, массив, список или итератор. ЧТО СЛЕДУЕТ НАЗНАЧИТЬ, ЧТОБЫ УКАЗАТЬ АТРИБУТ В СИСТЕМЕ: выберите TAG В ФАЙЛЕ welcome.jsp

Что не так с кодом, пожалуйста, скажите мне подробно. Если бы вы могли прислать мне исправленную версию. ПОЧЕМУ тег <s:action> не работает?

Это ошибка, которую я получаю

13 апреля 2010 г., 13:49:19 org.apache.catalina.core.ApplicationDispatcher вызвать SEVERE: Servlet.service () для сервлет JSP бросил тег исключения 'select', field 'list': запрошенный ключ списка 'bglist' не может быть решен как коллекция / массив / карта / перечисление / итератор тип. Пример: люди или люди. {Имя} - [неизвестное местоположение]

Ответы [ 2 ]

0 голосов
/ 02 сентября 2016

bglist объявлен и определен в Action SelectBloodGroup , который никогда не входит в контекст. Поток вашего приложения: Index.jsp (отправить) -> module1.User (действие) -> welcome.jsp , поэтому bglist никогда не получал экземпляр, ни ваш класс SelectBloodGroup вызван.

Если вы хотите использовать инициализацию вашего bglist в Action, поместите его в module1.User или вы также можете указать значения list в jsp, если эти значения будут жестко закодированы (кажется) или для лучшей практики вы может использовать пакеты ресурсов для статических значений (лучше, чем жесткое кодирование).

Чтобы задать жестко закодированные значения в jsp Select List, вы можете использовать следующий код:

<select name="bgList" id="bgListId">
    <option value="1">Bpositive</option>
    <option value="someValue">someLabel</option>
</select>

Пожалуйста, попробуйте использовать шаблон camelCase при объявлении переменных. Надеюсь, это поможет.

0 голосов
/ 13 апреля 2010

Кажется, вы неправильно понимаете основной поток Struts2.

Страница welcome.jsp - это страница результатов (просмотр) для действия «MyName» (плохое имя, BTW). Это означает, что при создании страницы welcome.jsp действие «MyName» (класс module1.User) только что было «выполнено», и именно этот объект (экземпляр класса module1.User) находится в представить «область» (стек значений), когда результат показан. Итак, welcome.jsp ищет список «bglist» в классе module1.User.

Вам необходимо переосмыслить свои действия.

(Ваша путаница может быть связана с вашим утверждением "в результате index.jsp является страницей welcome.jsp" ... вы должны думать, что страницы jsp являются результатом ДЕЙСТВИЙ, а не других jsps)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...