我有一个Primefaces Commandlink,它在我的mailto地址的末尾提供了一个工件。我不确定'#'的来源。
这是前端代码。
<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编码的空格'+'。
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();
}
答案 0 :(得分:1)
您使用的构造函数会附加哈希字符。 看看JavaDoc:
public URI(String scheme, String ssp, String fragment) throws URISyntaxException
[...]
最后,如果给出了片段,则在字符串后附加一个哈希字符('#'),然后是该片段。引用了不是合法URI字符的任何字符。
您应该使用URI
的适当构造函数;请参阅文档。在我看来,您的第三个论点更像是query
而不是fragment
。