如何在Grails Domain Class中创建瞬态变量?

时间:2011-12-16 15:35:33

标签: grails grails-domain-class

如何在非持久性的域类中设置变量。我希望能够写入和读取该变量,但我不希望它成为表的一部分。

在rails中执行此操作的方法是使用attr_accessor设置变量。 Grails有可能这样吗?有谁知道怎么做?

谢谢!

3 个答案:

答案 0 :(得分:22)

只需将所有瞬态变量的名称添加到transients列表中,例如

class MyDomain {

  static transients = ['nonPersistent', 'nonPersistent2']

  Integer nonPersistent
  Integer nonPersistent2

  Integer persistent
  Integer persistent2      
}

答案 1 :(得分:1)

定义不应持久保存到数据库的属性名称列表。如果您使用只读辅助方法(" getters")作为辅助方法但是混淆为与持久性相关,这通常很有用。

<强>实施例

       public class Languge extends Activity
   {
Button hindi ,english;
private Locale locale;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.languge);
    hindi= (Button) findViewById(R.id.hindi);
    english= (Button) findViewById(R.id.english);
    hindi.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Locale[] locale = Locale.getAvailableLocales();
            String[] languages= Resources.getSystem().getAssets().getLocales();
            Locale myLocale = new Locale("hi");
            setLocale(myLocale);
            Intent intent=new Intent(getBaseContext(), MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);

        }
    });
    english.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Locale[] locale = Locale.getAvailableLocales();
            String[] languages= Resources.getSystem().getAssets().getLocales();
            Locale myLocale = new Locale("en");
            setLocale(myLocale);
            Intent intent=new Intent(getBaseContext(), MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);

        }
    });

}
public void setLocale(Locale value) {
    Locale.setDefault(value);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = value;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    locale = value;
}

答案 2 :(得分:0)

这里我在域类中创建了瞬态变量 -

class Application {
    dataType domainFields  //define datatypes
    static transients = [ 'name']

    String  getName() {
        return 'grails App'
    }
}