从DAO中获取值以在JSP中使用

时间:2014-02-11 16:40:11

标签: java spring jsp spring-mvc jstl

我认为这很容易做到,但我一直在谷歌和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;
    }

1 个答案:

答案 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";
    }
}