Почему значение введенного бина равно нулю
У меня есть пользовательский тег. Когда я внедряю ресурс весеннего сообщения и хочу получить доступ к файлу свойств, внедренный компонент всегда имеет значение null. Что я делаю неправильно,
@Component
public class GridColumnsCutomTagHander extends TagSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
@Inject
private MessageSource messageSource;
private String propertyFileName;
/**
* @return the propertyFileName
*/
public String getPropertyFileName() {
return this.propertyFileName;
}
/**
* @param propertyFileName
* the propertyFileName to set
*/
public void setPropertyFileName(String propertyFileName) {
this.propertyFileName = propertyFileName;
}
@Override
public int doStartTag() throws JspException {
try {
JspWriter out = pageContext.getOut();
String gridColumnValues = messageSource.getMessage(propertyFileName,
null, EWMSUser.getCurrentLanguageLocale());
out.println(gridColumnValues );
} catch (IOException e) {
e.printStackTrace();
}
return (SKIP_BODY);
}
Пожалуйста, помогите мне выяснить, где проблема
1 ответ
Исходя из моего опыта, MessageSource может быть успешно внедрен, если текущий класс имеет среду servletContext. Так что вам нужно внедрить его в свой слой контроллеров и затем передать его в качестве параметра конструкции в текущий класс тегов.
Я думаю, что для того, чтобы сделать это, вам не следует использовать @Componment для инициализации класса GridColumnsCutomTagHander, вам нужно создать его в своем коде вручную. Ниже приведено мое решение:
- Код для класса GridColumnsCutomTagHander
public class GridColumnsCutomTagHander extends TagSupport {
private static final long serialVersionUID = 1L;
private MessageSource messageSource;
public GridColumnsCutomTagHander(){
}
public GridColumnsCutomTagHander(MessageSource messageSource){
this.messageSource=messageSource;
}
private String propertyFileName;
/**
* @return the propertyFileName
*/
public String getPropertyFileName() {
return this.propertyFileName;
}
/**
* @param propertyFileName
* the propertyFileName to set
*/
public void setPropertyFileName(String propertyFileName) {
this.propertyFileName = propertyFileName;
}
@Override
public int doStartTag() throws JspException {
try {
JspWriter out = pageContext.getOut();
String gridColumnValues = messageSource.getMessage(propertyFileName,
null, EWMSUser.getCurrentLanguageLocale());
out.println(gridColumnValues );
} catch (IOException e) {
e.printStackTrace();
}
return (SKIP_BODY);
}
- Используйте его в своем классе слоя контроллера:
@Controller
public TestController{
@Inject
private MessageSource messageSource;
@RequestMapping("test")
public void test(){
new GridColumnsCutomTagHander(messageSource);//now the messageSource is not null
}
}