我正在尝试渲染一个子片段,该子片段通过 Spring MVC控制器和不直接呈现Thymeleaf视图模板。
是否可以保留包含所有变量的上下文?不知何故?
现在我正在使用正在使用return templateEngine.process(url, context); // context contains all variables I need
处理URL的templateEngine而没有太大的运气。
processor
但是,即使在如上所述正确传递上下文时,它也会丢失,因为内部请求基本上由新线程处理。
从父currentLanguages
传递任何数据到子视图(控制器)的唯一可能性是通过GET参数,但这对我来说不太理想,因为我有很多变量,如currentCountries
,我需要在片段中使用public class MainActivity extends AppCompatActivity {
WebView webView;
SwipeRefreshLayout swipe;
ProgressBar progressBar;
private final String CACHE_URL_KEY = "CACHE_URL";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = (ProgressBar) findViewById(R.id.awv_progressBar);
swipe = (SwipeRefreshLayout) findViewById(R.id.swipe);
LoadWeb(savedInstanceState);
progressBar.setMax(100);
progressBar.setProgress(1);
swipe = (SwipeRefreshLayout) findViewById(R.id.swipe);
swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
webView.reload();
}
});
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
progressBar.setProgress(progress);
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
progressBar.setVisibility(View.VISIBLE);
}
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
webView.loadUrl("file:///android_asset/error.html");
}
public void onPageFinished(WebView view, String url) {
//Don't show ProgressBar
progressBar.setVisibility(View.GONE);
//Hide the SwipeRefreshLayout
swipe.setRefreshing(false);
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState )
{
outState.putString(CACHE_URL_KEY,webView.getUrl());
super.onSaveInstanceState(outState);
}
public void LoadWeb(Bundle savedInstanceState) {
webView = (WebView) findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
if (savedInstanceState != null) {
String savedUrl = savedInstanceState.getString(CACHE_URL_KEY);
webView.loadUrl(savedUrl);
}else {
webView.loadUrl("https://www.google.com/");
}
swipe.setRefreshing(true);
}
@Override
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
finish();
}
}
等。
是否有可能通过首先通过Spring MVC控制器但保留原始上下文来以某种方式呈现Thymeleaf片段?我完全理解为什么非本地URL需要新的线程和实际获取请求,但本地URL需要什么呢?