War file gerando javax.el.PropertyNotFoundException - via Eclipse, Ok

Salve salve (eu) pessoal.
Sempre fui um observador dessas páginas, mas hoje venho recorrer à vossa ajuda após ler várias threads parecidas e ainda não conseguir resolver o meu problema…

Se puderem me dar um luz, ficarei agradecido.

Após alguns anos afastado da faculdade, estou tentando rodar um projeto JSF (2.2) no TomCat 8.0.
Pois bem, no ambiente do eclipse tudo roda numa boa, porém quando eu exporto o war e tento executar o projeto diretamente pelo tom cat eu recebo o erro abaixo:

javax.servlet.ServletException: /login.xhtml @33,62 value="#{loginMB.login}": Target Unreachable, identifier 'loginMB' resolved to null
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:671)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

javax.el.PropertyNotFoundException: /login.xhtml @33,62 value="#{loginMB.login}": Target Unreachable, identifier 'loginMB' resolved to null
	com.sun.faces.facelets.el.TagValueExpression.getType(TagValueExpression.java:100)
	org.primefaces.util.ComponentUtils.getConverter(ComponentUtils.java:146)
	org.primefaces.renderkit.InputRenderer.getConvertedValue(InputRenderer.java:175)
	javax.faces.component.UIInput.getConvertedValue(UIInput.java:1045)
	javax.faces.component.UIInput.validate(UIInput.java:975)
	javax.faces.component.UIInput.executeValidate(UIInput.java:1248)
	javax.faces.component.UIInput.processValidators(UIInput.java:712)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
	javax.faces.component.UIForm.processValidators(UIForm.java:253)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
	javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1261)
	javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:1195)
	com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:76)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Já conferi o meu “WEB-INF\classes” no webapps e as classes está lá.
A seguir meu web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>missal</display-name>
  <welcome-file-list>
    <welcome-file>index.jsf</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/faces/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <context-param>
    <param-name>javax.faces.DATETIMECONVERTER_DEFAULT_TIMEZONE_IS_SYSTEM_TIMEZONE</param-name>
    <param-value>true</param-value>
  </context-param>
  <context-param>
    <param-name>primefaces.THEME</param-name>
    <param-value>afternoon</param-value>
  </context-param>
  <servlet>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-name>AxisServlet</servlet-name>
    <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/servlet/AxisServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>*.jws</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
  </servlet-mapping>
  <servlet>
    <display-name>Axis Admin Servlet</display-name>
    <servlet-name>AdminServlet</servlet-name>
    <servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
    <load-on-startup>100</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>AdminServlet</servlet-name>
    <url-pattern>/servlet/AdminServlet</url-pattern>
  </servlet-mapping>
     <context-param>
        <param-name>primefaces.PUBLIC_CAPTCHA_KEY</param-name>
        <param-value>XXXXXXXXXXXXXXX</param-value>
    </context-param>
    <context-param>
        <param-name>primefaces.PRIVATE_CAPTCHA_KEY</param-name>
        <param-value>XXXXXXXXXXXXXXX</param-value>
    </context-param>
</web-app>

login.xhtml

Summary
<f:facet name="header">
	<p:row>
		<p:column colspan="2">
		<p:outputLabel value="Login" />
	</p:column>
				</p:row>
			</f:facet>
			
			<p:row>
				<p:column>
					<p:outputLabel for="login" value="Login" />
				</p:column>
				<p:column>
					<p:inputText id="login" value="#{loginMB.login}"
							style="width:100%"
							required="true"
							requiredMessage="Preenchimento obrigatório: Login" />
				</p:column>
			</p:row>
			
			<p:row>
				<p:column>
					<p:outputLabel for="senha" value="Senha" />
				</p:column>
				<p:column>
					<p:password id="senha" value="#{loginMB.senha}"
							style="width:100%"
							required="true"
							requiredMessage="Preenchimento obrigatório: Senha" />
				</p:column>
			</p:row>
			
			<p:row>
				<p:column colspan="2">
					<div style="margin: 0 auto; width: 304px;">
						<p:captcha language="pt-BR" label="Captcha" />
					</div>
				</p:column>
			</p:row>
			
			<f:facet name="footer">
				<p:row>
					<p:column colspan="2" style="text-align:center">
							<p:commandButton value="Entrar" ajax="false"
							actionListener="#{loginMB.logar}" />
					</p:column>
				</p:row>
			</f:facet>
		</p:panelGrid>
	</h:form>
</h:body>

E por fim. o bean

package mis.mBean;

import java.io.IOException;
import java.io.Serializable;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

import mis.seguranca.LoginControl;
import mis.seguranca.RegistraLog;
import mis.util.SessionUtil;

@ManagedBean(name="loginMB")
@ViewScoped
public class LoginMB implements Serializable {
	
	private static final long serialVersionUID = -773831090661639757L;
	@ManagedProperty(value="login")
	String login;
	@ManagedProperty(value="senha")
	String senha;
	
	@PostConstruct
	public void init() {
		//se houver algo na sessão "erroPermissao", então envia uma mensagem à tela
		try {
			String msg = (String) SessionUtil.getParam("erroPermissao");
			if (msg.length() > 0)
				FacesContext.getCurrentInstance().addMessage(
						null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
								"Erro!", msg));
			SessionUtil.remove("erroPermissao");
		} catch (NullPointerException e) {
			;
		}
	}
	
	public void logar() {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		String contexto = facesContext.getExternalContext().getContextName();
		
		int validacao = LoginControl.login(login, senha);
		
		if (validacao > 0) { //login ok
			try {
				//registra o evento em log
				RegistraLog.registraLoginLogout(
						1,
						((HttpServletRequest) facesContext.getExternalContext().getRequest()).getRemoteAddr(),
						validacao,
						true);
				//redireciona o usuário
				facesContext.getExternalContext().redirect("/" + contexto + "/index.jsf");
			} catch (IOException e) {
				System.err.println("Não foi possível redirecionar o usuário para tela inicial");
			}
		}  else { //erro no login
			//registra o evento em log
			RegistraLog.registraLoginLogout(
					1,
					((HttpServletRequest) facesContext.getExternalContext().getRequest()).getRemoteAddr(),
					0,
					false);
			//atribui e exibe mensagem de retorno na tela
			String msg = "";
			if (validacao == -1) //-1 = campos em branco
				msg = "Preencha corretamente todos os campos";
			if (validacao == -2 || validacao == -4) //-2 = usuário não encotrado //-4 = senha incorreta
				msg = "Usuário e/ou Senha incorretos";
			if (validacao == -3) //-3 = usuario ou grupo inativo
				msg = "Seu usuário ou o grupo ao qual ele pertence não está ativo";
			FacesContext.getCurrentInstance().addMessage(
					null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
							"Erro!", msg));			
		}
	}
	
	public int valida() {
		FacesContext facesContext = FacesContext.getCurrentInstance();
		String contexto = facesContext.getExternalContext().getContextName();
		
		int validacao = LoginControl.valida();
		//System.out.println("LoginMB: valida: validacao: " + validacao);
		
		if (validacao < 0) {
			try {
				if (LoginControl.valida() == -2) { //-2 = usuario ou grupo inativo
					facesContext.getExternalContext().redirect("/" + contexto + "/login.jsf");
					SessionUtil.setParam("erroPermissao", "Seu usuário ou o grupo ao qual ele pertence não está ativo");
				} else if (LoginControl.valida() == -3) { //-3 = sem permissão à tela
					facesContext.getExternalContext().redirect("/" + contexto + "/index.jsf");
					SessionUtil.setParam("erroPermissao", "Você não tem permissão para acessar essa página");
				} else if (LoginControl.valida() == -4) { //-1 = sessão expirada
					facesContext.getExternalContext().redirect("/" + contexto + "/login.jsf");
					SessionUtil.setParam("erroPermissao", "Sua sessão expirou, faça login novamente");
				} else {
					facesContext.getExternalContext().redirect("/" + contexto + "/login.jsf");
					SessionUtil.setParam("erroPermissao", "Faça login para poder acessar o sistema");
				}
			} catch (IOException e) {
				System.err.println("Não foi possível redirecionar o usuário para tela de login");
			}
			return 0;
		} else
			return 1;
	}
	
	public void logout() {
		//registra o evento em log
		RegistraLog.registraLoginLogout(
				2,
				((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getRemoteAddr(),
				LoginControl.getCodUserLogado(),
				true);
		LoginControl.logout();
		valida();
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}
}

Dynamic web project? Colocou os jars dentro de WEB-INF/lib?

Sim, estão todos lá