ResourceManager:无法在任何资源加载器中找到资源'emailTemplate.vm'

 于浮浅 发布于 2023-01-01 13:02

我正在用maven在弹簧上做一个应用程序.我在app.properties文件中写了所有属性

文件结构是这样的

                         src/main/resource

                             |_
                             |   templates
                             |        |_mytempaltefile.vm    
                             |_ app.properties         

我在app.property中给出了路径(absloute)

app.properties文件

template.base.path=D\:/SVN/trunk/tfbdirect/src/main/resources/templates

公用事业,spring.xml


    
        
            file
            
                org.apache.velocity.runtime.resource.loader.FileResourceLoader
            
            ${template.base.path}
            false
        
       

我的课

 import java.util.HashMap;
 import java.util.Map;
 import org.apache.velocity.app.VelocityEngine;
 import org.springframework.ui.velocity.VelocityEngineUtils;
 import com.providerpay.tfbdirect.service.mail.MailSenderService;

 public class LoginServiceImpl implements ILoginService{

/**
 * Injected through Spring IOC
 */
ILoginDAO loginDAO;
ClaimRuleProcessServiceImpl claimRuleProcessServiceImpl;
PlatformTransactionManager txmanager;

//IForgotPasswordDAO forgotPasswordDAO;

private VelocityEngine velocityEngine;

private String appURL;
private MailSenderService mailSenderService;




TFBLogger log = TFBLoggerFactory.getLogger(RuleServer.class);



public String getAppURL() {
    return appURL;
}

public void setAppURL(String appURL) {
    this.appURL = appURL;
}

public MailSenderService getMailSenderService() {
    return mailSenderService;
}

public VelocityEngine getVelocityEngine() {
    return velocityEngine;
}


public void setVelocityEngine(VelocityEngine velocityEngine) {
    this.velocityEngine = velocityEngine;
}

public void setMailSenderService(MailSenderService mailSenderService) {
    this.mailSenderService = mailSenderService;
}

public ILoginDAO getLoginDAO() {
    return loginDAO;
}
public void setLoginDAO(ILoginDAO loginDAO) {
    this.loginDAO = loginDAO;
}
public ClaimRuleProcessServiceImpl getClaimRuleProcessServiceImpl() {
    return claimRuleProcessServiceImpl;
}
public void setClaimRuleProcessServiceImpl(
        ClaimRuleProcessServiceImpl claimRuleProcessServiceImpl) {
    this.claimRuleProcessServiceImpl = claimRuleProcessServiceImpl;
}   
public void setTxmanager(PlatformTransactionManager txmanager) {
    this.txmanager = txmanager;
}



/**
 * Validates Login
 * @param loginView
 * @return
 */
public boolean isValidLogin(LoginView loginView) {

    /* create tx definition object */
    DefaultTransactionDefinition paramTransactionDefinition = new     DefaultTransactionDefinition();
    TransactionStatus status = txmanager.getTransaction(paramTransactionDefinition );
    boolean result = false;

    try{
        LoginEntity loginEntity = BeanMapper.INSTANCE.viewToEntityMapper(loginView);
        Feedback feedback = claimRuleProcessServiceImpl.validateClaimEligibility(loginEntity);
        log.info( "Rule executed was " +feedback.getAll());

        for (FeedbackMessage feedbackmessaage :feedback.getAll())
        {
            log.info("\n--------------");
            log.info(feedbackmessaage.getRuleCd());
            log.info(feedbackmessaage.getMessage());
            log.info(feedbackmessaage.getSeverity().getName());
            log.info("\n--------------");
        }

        result = loginDAO.isValidLogin(loginEntity);
        log.debug("result = {}", result);

        txmanager.commit(status);

    }catch(Exception e){
        txmanager.rollback(status);
        throw new TfbException("Error occured while validating login credentials");
    }

    return result; 
}




@Autowired
VelocityEngine velocityengine;
public boolean mailResetLink(LoginView loginView) {

    String toEmailAddress;
    LoginEntity loginEntity = BeanMapper.INSTANCE.viewToEntityMapper(loginView);

    /* getting user Email from DAO*/
    toEmailAddress = loginDAO.getEmailByUsername(loginEntity);

    if(toEmailAddress != null && toEmailAddress.trim().length() > 0)
    {
        Map model = new HashMap();
        model.put("user", loginEntity);
        model.put("appURL", appURL);
        String body = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "emailTemplate.vm","UTF-8", model);

        mailSenderService.sendMail("from mail", toEmailAddress, "Password Reset Link",body);


    }
    else
    {
        return false;
    }
    return true;
}

public boolean resetPassword(LoginView loginView) 
{

    LoginEntity loginEntity = BeanMapper.INSTANCE.viewToEntityMapper(loginView);

    return loginDAO.resetPassword(loginEntity);
}
}

一切都很好,但我需要改变相对路径的绝对路径..我尝试了很多方法.

我试着跟随

template.base.path=/templates/

但仍然低于错误.

ResourceManager:无法在任何资源加载器中找到资源'emailTemplate.vm'.

谁能帮我..

提前致谢

2 个回答
  • 我最近遇到了与karaf OSGi框架相同的问题.在CXF资源类(在此上下文中登录)中,您必须像这样初始化Velocity Engine:

    public Login() {
        /*  first, get and initialize an engine  */
        ve = new VelocityEngine();        
        ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
        ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
        ve.init();
    }
    

    然后,在Web方法中,实例化模板:

        /*  create a context and add data */
        synchronized (initLock) {
            if (loginTemplate == null) {
                loginTemplate = ve.getTemplate("templates/login.vm");
            }
        }
        VelocityContext context = new VelocityContext();
    

    不幸的是,ve.init()在构造函数中调用之后立即加载模板并没有用.

    2023-01-01 13:04 回答
  • 使用带弹簧的速度时,您会遇到一个常见的陷阱:将模板放在一个位置,并使用资源加载器在另一个位置搜索它们.所以你有两个常见的用法:

    将模板放在类路径中(就像你一样)并使用 ClasspathResourceLoader

    resource.loader = class
    class.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
    

    它很简单,依赖性很小,但它会强制你将模板放在类路径中......

    把模板放在WEB-INF(就像你对JSP一样)并使用WebappResourceLoader速度工具

    resource.loader=webapp
    webapp.resource.loader.class=org.apache.velocity.tools.view.WebappResourceLoader
    webapp.resource.loader.path=/WEB-INF/velocity/
    

    对于模板位置来说更自然,但是您需要添加对速度工具的依赖性.

    让spring管理依赖关系,但不要通过new...

    2023-01-01 13:06 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有