Каковы возможные причины для выдачи «Ошибка не указана bean-компонентом» в Struts 1.1? - PullRequest
1 голос
/ 05 мая 2010

Какими могут быть возможные причины появления этой ошибки при запуске Struts 1.1 в веб-приложении? Трассировка стека из моего окна консоли IDE показана ниже:

java.lang.IllegalArgumentException: <strong>No bean specified</strong>
at org.apache.commons.beanutils.PropertyUtils.getPropertyDescriptor(PropertyUtils.java:837)
at org.apache.commons.beanutils.BeanUtils.setProperty(BeanUtils.java:934)
at org.apache.commons.beanutils.BeanUtils.populate(BeanUtils.java:808)
at org.apache.struts.util.RequestUtils.populate(RequestUtils.java:1252)
at org.apache.struts.action.RequestProcessor.processPopulate(RequestProcessor.java:821)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:254)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:223)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3245)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2003)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1909)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1359)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)

Ответы [ 2 ]

9 голосов
/ 06 мая 2010

Скорее всего, он генерируется классом org.apache.commons.beanutils.PropertyUtils, пытающимся получить доступ к свойствам из bean-компонента, который имеет значение null. Ваш ActionForm может быть этим бобом.

У вас есть ActionForm, определенный для вашего Action? Проверьте файл struts-config.xml и посмотрите, относится ли атрибут name тега <action> к <form-bean>.

Вы не предоставляете достаточно информации здесь, так что я могу только догадываться. Вы также должны опубликовать трассировку стека.

РЕДАКТИРОВАТЬ: Есть еще одна вещь, которую вы можете проверить. Из трассировки стека кажется, что с вашей формой действия все в порядке (я не думаю, что вы бы так глубоко вошли в вызов, если бы форма была нулевой), но это может быть что-то в форме.

Используете ли вы вложенные свойства или задаете что-то для bean-компонента в форме, например:

public class MyAction extends ActionForm {
  private SomeBean innerBean;
  ...
  public SomeBean getInnerBean() { 
    return this.innerBean; 
  }
}

Если в своем JSP вы указали form.innerBean.someProperty при отправке значения для этого, Struts попытается сделать что-то вроде form.getInnerBean().setSomeProperty(...). Если деталь form.getInnerBean() пуста, Struts будет жаловаться, прежде чем вы получите исключение NullPointerException.

Решением для такого рода вещей является изменение:

public class MyAction extends ActionForm {
  private SomeBean innerBean;
  ...
}

до

public class MyAction extends ActionForm {
  private SomeBean innerBean = new SomeBean();
  ...
}

Может ли это быть причиной?

1 голос
/ 23 декабря 2015

Привет У меня была такая же проблема или похожая. В моем случае я определил форму и инициализировал его свойства. но когда я отправляю форму, у меня была та же ошибка, в сообщении говорилось, что одно из полей mi пустое. Это было потому, что в моем Struts-config.xml я имел обыкновение иметь видимость = «запрос» действительно области видимости = «сессия». Таким образом, каждый раз, когда я отправляю, я теряю свои данные.

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