【问题标题】:Call function of a Bean with ajax用ajax调用一个Bean的函数
【发布时间】:2013-04-17 22:22:43
【问题描述】:

好吧,伙计们,我需要调用 CorreoController,它是一个 bean,我正在使用 JSF,使用 ajax 因为我需要发邮件,我需要做收件箱。

 public Message[] refrescar(String correo, String password, int tipoMail)
{
    Properties prop = new Properties();
    prop.setProperty("mail.pop3.starttls.enable", "false");
    prop.setProperty(
        "mail.pop3.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    prop.setProperty("mail.pop3.socketFactory.fallback", "false");
    prop.setProperty("mail.pop3.port", "995");
    prop.setProperty("mail.pop3.socketFactory.port", "995");
    Session sesion = Session.getInstance(prop);

    switch(tipoMail)
    {
        case 1:try
    {
      // Se obtiene el Store y el Folder, para poder leer el
      // correo.
        Store store = sesion.getStore("pop3");
        store.connect(
            "pop.gmail.com", correo, password);
        Folder folder = store.getFolder("INBOX");
        folder.open(Folder.READ_ONLY);

        // Se obtienen los mensajes.
        Message[] mensajes = folder.getMessages();


        folder.close(false);
        store.close();
        return mensajes;
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
            break;

        case 2:try
    {
      // Se obtiene el Store y el Folder, para poder leer el
      // correo.
        Store store = sesion.getStore("pop3");
        store.connect(
            "pop3.live.com", correo, password);
        Folder folder = store.getFolder("INBOX");
        folder.open(Folder.READ_ONLY);

        // Se obtienen los mensajes.
        Message[] mensajes = folder.getMessages();

        // Se escribe from y subject de cada mensaje
        /*for (int i = 0; i < mensajes.length; i++)
        {
            System.out.println(
                "From:" + mensajes[i].getFrom()[0].toString());
            System.out.println("Subject:" + mensajes[i].getSubject());

            // Se visualiza, si se sabe como, el contenido de cada mensaje
            analizaParteDeMensaje(mensajes[i]);
        }*/

        folder.close(false);
        store.close();            
        return mensajes;
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
            break;
        default:break;

    }

    return null;


}

谁能帮助我如何提取这些元素mensajes,以及如何在javascript中制作一种dinamyc方式来制作一个表格以添加收集到的信息

【问题讨论】:

  • 这在网上的 JSF 教程中有介绍。您甚至可以在 StackOverflow JSF wiki 中找到好的 JSF 教程。此外,您需要指定使用 JSF 1.2 还是 JSF 2.x。

标签: java email jsf


【解决方案1】:

要在 JSF 中进行 AJAX 调用,您不需要使用 JavaScript。您可以尝试以下方法。

。豆子:

@ManagedBean
@ViewScope
public class CorreoController {
    private List<Message> mensajes;

    public void refrescar(String correo, String password, int tipoMail) {
        // Your logic

        // Update the mensajes list at the end of this method
        this.mensajes = ...;
    }

    // Getters and Setters
}

xhtml页面:

<h:dataTable id="mensajeTable" value="#{correoController.mensajes}" >
    ...
</h:dataTable>

<h:commandButton value="Get mensajes" actionListener="#{correoController.refrescar}" >
    <f:ajax render="mensajeTable" />
</h:commandButton>

【讨论】:

  • 在这种情况下,最好将托管 bean 设置为 @RequestScoped
  • @LuiggiMendoza: 不太确定 :)...@RequestScoped 仅在他不对列表执行任何操作(例如删除消息、标记为已读等)时才有效。 .. 既然他在处理一个收件箱,也许他甚至应该做延迟加载...
  • @Mr.J4mes 这种方法不是延迟加载...此外,您可以通过使用 GET 请求并在后台传递消息 ID 来执行这些操作...
  • @LuiggiMendoza:删除 1 条消息并且必须刷新所有内容?不,这对我来说不是一个理想的解决方案......我们甚至不知道他的手术是否昂贵......此外,lazy加载只是我的建议。假设有 100000 条消息,lazy 加载是必要的,并且不应使用 @RequestScoped 完成诸如邮箱视图之类的操作。
  • 在omnifaces 展示页面中有一个使用JSON 和@RequestScoped 托管bean 的实时示例(我已经在现实世界的应用程序中实现了它)并且它工作得很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 2018-05-17
  • 2020-10-16
相关资源
最近更新 更多