桌面和URI产生字符工件

时间:2018-09-13 15:44:17

标签: java primefaces jsf-2

我有一个Primefaces Commandlink,它在我的mailto地址的末尾提供了一个工件。我不确定'#'的来源。

enter image description here

这是前端代码。

<p:commandLink value="Mail Video Link" action="#{requestBean.requestUtility.informationRequestLink()}" />     

这是后端操作代码。

    public void informationRequestLink() {
    String subject = "Video Link";
    String cc = "friend2@domain.com,friend3@domain.com";
    String requestLink = "https://www.youtube.com/watch?v=SjeS6gtPq8E";
    String body
            = "Here is the link.\n"
            + requestLink + "\n\n"
            + "Watch at your leisure.";

    try {
        Desktop desktop = Desktop.getDesktop();

        String mailURIString = String.format("?subject=%s&cc=%s&body=%s",
            subject, cc, body);
        URI mailURI = new URI("mailto", "user@domain.com", mailURIString);

        desktop.mail(mailURI);
    } catch (IOException | URISyntaxException e) {
        e.printStackTrace();
    }   
}

[编辑]

我可以摆脱'#',但随后我得到UTF-8编码的空格'+'。

enter image description here

        String subject = "Video Link";
    String cc = "friend2@domain.com,friend3@domain.com";
    String requestLink = "https://www.youtube.com/watch?v=SjeS6gtPq8E";
    String body
            = "Here is the link.\n"
            + requestLink + "\n\n"
            + "Watch at your leisure.";

    try {
        Desktop desktop = Desktop.getDesktop();

        String mailURIString = String.format("mailto:%s?subject=%s&cc=%s&body=%s",
                "friend1@domain.com", subject.replaceAll(" ", "%20"), cc, URLEncoder.encode(body, "UTF-8"));
        URI mailURI = URI.create(mailURIString);

        desktop.mail(mailURI);
    } catch (Exception e) {
        e.printStackTrace();
    }   

1 个答案:

答案 0 :(得分:1)

您使用的构造函数会附加哈希字符。 看看JavaDoc

  

public URI(String scheme, String ssp, String fragment) throws URISyntaxException

     

[...]

     

最后,如果给出了片段,则在字符串后附加一个哈希字符('#'),然后是该片段。引用了不是合法URI字符的任何字符。

您应该使用URI的适当构造函数;请参阅文档。在我看来,您的第三个论点更像是query而不是fragment