我认为这很容易做到,但我一直在谷歌和StackOverflow上搜索几个小时没有运气。
对于初学者,我有一个使用Dojo的jsp页面。我使用Dojo的请求模块对Spring控制器进行各种各样的AJAX调用。控制器呼叫服务,服务调用DAO等。
最初,我有一个属性文件,其中包含我网站的几个配置设置。使用@Value将它们注入到各种Spring组件中。我想从我的管理页面动态配置这些,所以我添加了一个名为“SiteSettings”的域对象,它保存了我的属性文件中的值。当我的webapp启动时,如果它无法在持久性中对SiteSettings对象进行细化,它会创建一个新对象,使用我的属性文件中的设置填充它,并将其保留。如果一个人已经处于持久性状态,它就会使用它。
除了一个名为“authenticationRequired”的布尔值之外,所有站点属性都在后端使用。我需要在前端的javascript值中访问此值。在页面加载后,这很容易通过AJAX获得,但我认为,当我确定我应该能够从我的SiteSettingsService(使用它)获取值时,必须提出额外的请求是有点愚蠢的。 DAO获取域对象)。
现在,我直接从属性文件中获取值:
<fmt:bundle basename="swtc">
<fmt:message key="swtc.authenticationRequired" var="authenticationRequired"/>
</fmt:bundle>
<script type="text/javascript">
window.authenticationRequired = <c:out value="${authenticationRequired}"/>;
</script>
如何修改它从我的service / dao / domain对象获取值而不是直接从我的属性文件中获取值?这是我的控制器和服务文件......没有什么花哨的:
控制器:
@RequestMapping(value = "/getSiteSettings", method = RequestMethod.GET)
@ResponseBody
public ModelMap getSiteSettings(ModelMap model) {
try {
SiteSettings siteSettings = siteSettingsService.getSiteSettings();
model.addAttribute("siteSettings", siteSettings);
model.addAttribute("success", true);
} catch (Exception ex) {
logger.error("There was an error getting the site settings data. ", ex);
model.addAttribute("exceptionMessage", ex.getLocalizedMessage());
model.addAttribute("success", false);
}
return model;
}
服务:
@Override
public SiteSettings getSiteSettings(){
List<SiteSettings> siteSettings = siteSettingsDao.findAll();
if (siteSettings != null && !siteSettings.isEmpty()){
return siteSettingsDao.findAll().get(0);
}
return null;
}
答案 0 :(得分:1)
在负责呈现需要该属性的整个jsp的控制器方法中,您应该能够将authenticationRequired
属性放在Model
上,以便它在页面中可用于输出进入Javascript。您需要将SiteSettingsService
的实例自动装入该控制器:
@Controller
public class MainPageController { // or whatever it happens to be called
@Autowired
private SiteSettingsService siteSettingsService;
@RequestMapping(value="/mainPage", method=RequestMethod.GET)
public String displayMainPage(Model model) {
SiteSettings siteSettings = siteSettingsService.getSiteSettings();
// Make the property available to the view
model.addAttribute("authenticationRequired", siteSettings.isAuthenticationRequired());
return "mainPage";
}
}