Не удается загрузить параметры в действии Struts 2

В отношении Struts 2 и бизнес-объектов и указанного там кода:

  • Я cannot load the rp.randomCode как это дает null. У меня 3_. Я могу загрузить (получить значение запроса param, если я использую старый код)

  • Я не могу использовать private fields в RequestParam class, потому что, если я хочу сделать rp.randomCode, поле случайного кода в классе RequestParam должно быть public. (хотя не хочу использовать rp.getRandomCode()). Это нехорошо, так как поля должны быть закрытыми.

новый код:

public class RequestParam{
    private int userId;
    private int groupType;
    private int groupId;
    private String groupTitle;
    private String groupMemberIds;
    private int randomCode;
    private String message;
    private int messageId; //internal class ues
    //public getters and setters here

}

public class SendMessageOrStartChatAction extends BaseActoinSupport{

    private RequestParam rp;
    //public getters and setters here

    @Override
    protected void doExecute() throws IOException {

        //check if it had random code in db, (msg already saved in db)
        if(ChatDao.randomCodeExists(rp.randomCode)){
           // ...........
        }

    }

}

старый код:

public class SendMessageOrStartChatAction extends BaseActoinSupport{

    private static final long serialVersionUID = 1L;
    private int userId;
    private int groupType;
    private int groupId;
    private String groupTitle;
    private String groupMemberIds;
    private int randomCode;
    private String message;
    private int messageId; //internal class ues

    @Override
    protected void doExecute() throws IOException {

        //check if it had random code in db, (msg already saved in db)
        if(ChatDao.randomCodeExists(randomCode)){
            messageId = ChatDao.getMessageIdThatMatchesRandomCode(randomCode);  
            write(messageId);

        }else{
            if(groupId <= 0){
            //create group 
                groupId = ChatDao.createChatGroup(userId, groupTitle, groupType);
                String[] memberIdsArray = groupMemberIds.split("=="); 
                ChatDao.addUsersToGroup(groupId, memberIdsArray);
            }
            //save message
            messageId = ChatDao.saveMessage(userId,groupId , message);
            // queued: may be put this in last viewed messages here. may be.
            write(messageId);       
        }

    }

}

Как загрузить параметры, используя приведенный выше код?


person Mab    schedule 18.11.2013    source источник
comment
put on hold as unclear what you're asking by Dave Newton, Kevin Panko, Mihai Maruseac, mdml, Sean Vieira 10 hours ago. да, непонятно, вот почему я получил правильный ответ и положительный ответ на свой вопрос?   -  person Mab    schedule 19.11.2013


Ответы (1)


Предположим, в JSP у вас есть тег формы и одно или несколько полей ввода. Каждое поле имеет атрибут name. Этот атрибут является волшебным, поскольку Struts2 сопоставляет поля формы с атрибутами действий с использованием синтаксиса OGNL. Вложенные bean-компоненты, такие как rp, должны быть сопоставлены с префиксом rp., поэтому OGNL получит ссылку на этот bean-компонент перед установкой свойств, названных точкой. Чтобы заставить его работать, убедитесь, что перехватчик params указан в конфигурации действия, поскольку он отвечает за заполнение свойств экземпляра компонента вашего экземпляра действия.

person Roman C    schedule 18.11.2013
comment
поэтому я получу значение поля формы name на rp.name, если RequestParam class (rp field var) имеет поле name с геттерами и сеттерами для него? Если да. Я пробовал, и это не сработало. - person Mab; 18.11.2013
comment
Вы читали, что я написал? Опубликуйте JSP, вы не разместили его ни в первом, ни во втором вопросах. - person Roman C; 18.11.2013
comment
Скажет ли вам о чем-нибудь слово «экземпляр»? - person Roman C; 18.11.2013
comment
нет жсп. его url.com?userId=2342&randomCode=34534 ... приведите пример из реальной жизни, пожалуйста. Я могу загрузить (получить значение параметра запроса на получение, если я использую старый код). почему бы не с RequestParam rp; в новом кодексе - person Mab; 18.11.2013
comment
попробуйте url.com?rp.userId=2342&rp.randomCode=34534 ..., но прежде см. stackoverflow.com/a/18098135/573032 - person Roman C; 18.11.2013
comment
Это моя точка зрения. struts 2 должен автоматически подбирать randomCode, если только System.out.println(rp.randomCode) при условии, что rp является полем var в этом классе, а rp inturn имеет поле с именем randomCode. - person Mab; 18.11.2013
comment
Нет, struts2 не обрабатывает rp.randomCode как код Java, он обрабатывает его как выражение OGNL. Фактический Java-код выполняется getRp().setRandomCode(34534)`. - person Roman C; 18.11.2013
comment
в порядке. Я попробую. Спасибо. если у вас есть реальный точный код. Это было бы полезно для других зрителей стека. Наконец, как насчет моего второго замечания о видимости публичных полей? - person Mab; 18.11.2013
comment
это плохой выбор и не похож на объектно-ориентированный. - person Roman C; 18.11.2013
comment
хм.. но никак. Я думаю, в struts 2 рекомендуется централизовать параметры в rp? - person Mab; 19.11.2013
comment
централизация не является подходящим термином для этого, лучше подходит агрегирование или моделирование. - person Roman C; 19.11.2013