index.xhtml Не найден в ExternalContext как ресурс [duplicate]

используете ли вы конфигурацию SMTP для отправки своей электронной почты? попробуйте вместо этого использовать phpmailer. вы можете загрузить библиотеку из https://github.com/PHPMailer/PHPMailer . Я создал электронную почту, отправив этот путь:

function send_mail($email, $recipient_name, $message='')
{
    require("phpmailer/class.phpmailer.php");

    $mail = new PHPMailer();

    $mail->CharSet="utf-8";
    $mail->IsSMTP();                                      // set mailer to use SMTP
    $mail->Host = "mail.example.com";  // specify main and backup server
    $mail->SMTPAuth = true;     // turn on SMTP authentication
    $mail->Username = "myusername";  // SMTP username
    $mail->Password = "p@ssw0rd"; // SMTP password

    $mail->From = "me@walalang.com";
    $mail->FromName = "System-Ad";
    $mail->AddAddress($email, $recipient_name);

    $mail->WordWrap = 50;                                 // set word wrap to 50 characters
    $mail->IsHTML(true);                                  // set email format to HTML (true) or plain text (false)

    $mail->Subject = "This is a Sampleenter code here Email";
    $mail->Body    = $message;
    $mail->AltBody = "This is the body in plain text for non-HTML mail clients";    
    $mail->AddEmbeddedImage('images/logo.png', 'logo', 'logo.png');
    $mail->addAttachment('files/file.xlsx');

    if(!$mail->Send())
    {
       echo "Message could not be sent. 

"; echo "Mailer Error: " . $mail->ErrorInfo; exit; } echo "Message has been sent"; }

7
задан RevanthKrishnaKumar V. 21 April 2016 в 10:55
поделиться

2 ответа

Прежде всего, <welcome-file> не представляет путь к «домашней странице по умолчанию». Он представляет собой имя файла физического файла, содержащегося в папке, которую вы хотите использовать в качестве файла по умолчанию, когда запрашивается папка типа /, /foo/, /foo/bar/ и т. Д.

Таким образом, в JSF 2.x-аромате это будет в основном:

<welcome-file-list>
    <welcome-file>index.xhtml</welcome-file>
</welcome-file-list>

Таким образом, если конечный пользователь запрашивает /, и у вас есть /index.xhtml, он будет обслуживаться. Или, если enduser запрашивает /foo, и у вас есть /foo/index.xhtml, тогда он будет обслуживаться и т. Д. Если такого файла нет, тогда будет возвращена ошибка 404.

Теперь вы появляетесь чтобы отобразить ваш FacesServlet на префиксе <url-pattern> в /faces/*. Это осталось от JSF 1.0 / 1.1 возрастов и на самом деле не рекомендуется в наши дни. Возможно, вы читали устаревший учебник, ориентированный на JSF 1.x, или плохо поддерживаемый учебник, который был первоначально написан для JSF 1.x, а затем незаметно обновлен для JSF 2.x вместо перезаписывания с нуля.

Этот учебник также, похоже, не объяснил вам некоторые основы сервлетов . А именно, чтобы заставить JSF-компоненты на странице XHTML запускать и генерировать некоторый вывод HTML, FacesServlet необходимо вызвать, когда запрашивается страница XHTML. Когда вы запрашиваете страницу XHTML так /index.xhtml, а FacesServlet отображается на /faces/*, тогда она не будет вызываться. Затем браузер будет извлекать необработанный исходный код JSF без генерируемого вывода HTML. Вы можете увидеть его правой кнопкой мыши, Просмотреть источник в веб-браузере. Вы должны были запросить такую ​​страницу как /faces/index.xhtml, чтобы FacesServlet мог запускать и выводить HTML-вывод, который браузер может понять и представить.

Это не очень хорошо сочетается с файлами приветствия. Это полностью объясняет, почему вы получаете «чистую белую» (пустую) страницу при использовании index.xhtml в качестве приветственного файла (некоторые уступающие веб-браузеры, такие как IE, путают запрашивают диалоговое окно загрузки из-за отсутствия / неправильного типа содержимого на ответ, содержащий исходный исходный код XHTML). FacesServlet просто не вызывался. Просто избавитесь от старомодного шаблона URL /faces/* и используйте шаблон URL-адреса JSF 2.x *.xhtml.

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

Таким образом, файлы приветствия должны работать, и вы можете просто открыть JSF страниц, напрямую запрашивая его физический URL-адрес без сбоев с виртуальными URL-адресами. Это невозможно в JSF 1.x, потому что это позволяло FacesServlet работать в бесконечном цикле, вызывающем себя и вызывающем переполнение стека.

См. Также:


Что касается этих предупреждений, они не связаны друг с другом, но вполне доступны для поиска.

12
ответ дан Community 20 August 2018 в 22:02
поделиться
  • 1
    Да, я знал, что это только физический файл. Я просто не объяснил это правильно. Я не пытался запускать эти страницы login.xhtml и welcome.xhtml по умолчанию. Я пытался создать новую страницу со ссылкой на эту страницу входа. Эта новая страница будет просто новым простым физическим файлом. Я знал о сервлетах, несколько лет назад работал над страницами jsp. Хотя спасибо за третье звено. Это пригодится. Теперь он работает, это проблема с тегом сопоставления сервлета. Интересно, что это не было разрешено в JSF 1 ... – Bob 19 December 2014 в 12:54
  • 2
    Пожалуйста. – BalusC 19 December 2014 в 13:23
  • 3
    @BalusC Я сейчас играю с этой проблемой. Я хочу иметь настраиваемое сопоставление, поэтому я заменил /faces/* на *.html. Однако моя индексная страница ведет себя непредвиденно. Я попробовал <welcome-file>index.html</welcome-file>, но он отображает только мой заголовок в верхнем левом углу (я использую шаблон с <ui:composition>. Когда я проверяю исходный код, он показывает исходный код самого файла индекса. x html back, как для файла приветствия, так и для отображения, он работает снова. Поэтому кажется, что они должны быть синхронизированы. Есть ли способ решить это? – developer10 28 October 2016 в 20:11

Вы можете установить страницу по умолчанию в файле web.xml, чтобы вызвать faceServlet в JSF двумя способами:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
     version="4.0">
    <servlet>
        <servlet-name>facesServlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>facesServlet</servlet-name>
        <url-pattern>*.xhtml</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

или вызвать facesServlet непосредственно из файла приветствия следующим образом:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
 version="4.0">
    <welcome-file-list>
        <welcome-file>faces/index.xhtml</welcome-file>
    </welcome-file-list>
</web-app>

Надеюсь, это поможет кому-то!

0
ответ дан webtechnelson 20 August 2018 в 22:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: