1

実行時にSmartGWTアプリケーションのテーマをコードから変更したい

これはSmartGWTショーケースで機能的に確認できますが、SmartGWTショーケースではこのためのコードを確認できません。

私が今していることは

これは私のXMLクラスです

<?xml version="1.0" encoding="UTF-8"?>
         <inherits name="com.smartgwt.SmartGwtNoTheme"/>
         <inherits name="com.smartclient.theme.graphite.Graphite"/>
         <inherits name="com.smartclient.theme.blackops.BlackOps"/>
         <inherits name="com.smartclient.theme.enterprise.Enterprise"/>
         <inherits name="com.smartclient.theme.enterpriseblue.EnterpriseBlue"/>

これは私のHTMLクラススニペットです

             <title>My Web</title>


              <script>
          function readCookie(name) {
        var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for ( var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ')
            c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0)
            return c.substring(nameEQ.length, c.length);
    }
    return null;
}

// Determine what skin file to load
var currentSkin = readCookie('skin');
if (currentSkin == null){
    currentSkin = "Enterprise";
}
alert(currentSkin);
        </script>
           <script type="text/javascript">
        document.write("<" + "script src=testtheme/sc/skins/"
        + currentSkin + "/load_skin.js><"+"/script>");
           </script>     

これは私のJavaクラスです

       SelectItem selectItem = new SelectItem("skin", "Choose Skin");
    DynamicForm df = new DynamicForm();
    hpnlMain.add(df);
    df.setItems(selectItem);
    selectItem.setWidth(130);
    java.util.LinkedHashMap<String, String> valueMap = new java.util.LinkedHashMap<String, String>();
    valueMap.put("Enterprise", "Enterprise");
    valueMap.put("EnterpriseBlue", "EnterpriseBlue");
    valueMap.put("TreeFrog", "TreeFrog");
    valueMap.put("BlackOps", "BlackOps");
    valueMap.put("Graphite", "Graphite");


    selectItem.setValueMap(valueMap);

    String currentSkin = Cookies.getCookie("skin");

    if (currentSkin == null) {
        currentSkin = "Enterprise";
    }
    selectItem.setDefaultValue(currentSkin);
    selectItem.addChangedHandler(new ChangedHandler() {

        @Override
        public void onChanged(ChangedEvent event) {
            // TODO Auto-generated method stub
            Cookies.setCookie("skin", event.getValue().toString());
            Window.Location.reload();
        }
    });

期待される結果は、自分のスキンから任意のスキンを選択したときにSelectItem、そのスキンを適用する必要があるということですが、効果はありません。

私のHTMLファイルでこの行を調べてください

         <script type="text/javascript">
document.write("<" + "script src=testtheme/sc/skins/"
        + currentSkin + "/load_skin.js><"+"/script>");

ここでは、正確なパスが何になるかわかりません。クラスパスにsmatgwt-skins.jarがあります。

ありがとう

4

2 に答える 2

1

スキンを変更してアプリケーションがリロードされると、htmlファイルの「alert(currentSkin)」行は何を表示しますか?新しく選択したスキン名が表示されますか?

SmartGWTショーケースのコードを使用しているように見えます。または、たまたまそれとほとんど同じように見えます。

http://code.google.com/p/smartgwt/source/browse/trunk/samples/showcase/src/com/smartgwt/sample/showcase/client/Showcase.java

于 2013-03-20T16:52:27.190 に答える
0

多分これは役立つかもしれません:ここに

この状況については、Smartclientフォーラムを確認してください。多くの情報があります。

于 2013-03-22T14:26:51.330 に答える