3

この質問はよく聞かれることを知っておりKelly Chan、私にとってはうまくいく答えを提供しましたが、コミュニティが私を助けてくれることを願っている小さな問題がまだあります.

たとえば、ユーザーが次のように入力した場合:

Please visit www.google.com

次に、これに変換したい

Please visit <a href="http://www.google.com">www.google.com</a>

:元のテキストには のみが含まれていますが、その前にwww.google.comある必要があることを何らかの形で検出しましhttp://た。なのでリンクになり<a href="http://www.google.com">www.google.com</a>ます。リンクが の場合はhttp://www.google.com、ラップするだけです<a href>

編集Kelly Chan彼女の答えを修正しましたが、うまくいきました。以下は解決策です。

    Pattern patt = Pattern.compile("(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'\".,<>???“”‘’]))");
    Matcher matcher = patt.matcher(this.mytext);    
    if(matcher.find()){
        if (matcher.group(1).startsWith("http://")){
            return matcher.replaceAll("<a href=\"$1\">$1</a>");
        }else{
            return matcher.replaceAll("<a href=\"http://$1\">$1</a>");
        }   
    }else{
        return this.mytext
    }
4

1 に答える 1

4

mytextをオブジェクト (たとえば) にカプセル化できます。次に、 のリンク化された形式を返すMyTextTOメソッド (たとえば ) を実装します。MBean には、を使用して JSF に表示されるのリストを格納するが必要です。の値を にバインドする と、リンクされたテキストを表示できます。getLinkifiedMyText()mytextMyTextTOArrayList<MyTextTO>MyTextTO<h:dataTable><h:outputText>getLinkifiedMyText()

このリンクを参照して、次を実装しgetLinkifiedMyText()ます。

public class MyTextTO{
        private String mytext;

       /**Getters , setters and constructor**/

        public String getLinkifiedMyText(){

            try {
                    Pattern patt = Pattern.compile("(?i)\\b((?:https?://|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'\".,<>???“”‘’]))");
                    Matcher matcher = patt.matcher(this.mytext);    

                    if (matcher.group(1).startsWith("http://")){
                                return matcher.replaceAll("<a href=\"$1\">$1</a>");
                    }else{
                            return matcher.replaceAll("<a href=\"http://$1\">$1</a>");
                    }   
            } catch (Exception e) {
               return this.mytext;
            }
        }
}



<h:dataTable  value="#{bean.dataList}" var="row">
    <h:column>  
        <h:outputText value="#{row.linkifiedMyText}" escape="false" />
    </h:column>
</h:dataTable>
于 2011-03-22T06:58:49.823 に答える