我同意 droggo 的观点,即响应式设计是最好的解决方案。
但是,作为替代方案,您可能会让所有 webflow 用户进入同一个视图,但在该视图本身内,您可以使用自己的 taglib 覆盖 g:layout taglib,该 taglib 能够确定您是否以移动用户与否,因此可以应用适当的布局。
在这种情况下,它可能有点笨拙,但它会为您提供一个可在整个应用程序中重用的解决方案,而不仅仅是在 webflow 中,并且它将特定于移动设备的代码保存在一个地方。
所以在你的网络流中:
viewState{
String view = 'viewState'
[snip] The rest of your code goes here
render(view:view)
}
然后你的观点:
<myapp:applyLayout name="someWebflowLayout">
[snip] Your non-layout GSP code goes here
</myapp:applyLayout>
然后你的标签库:
class MyAppTagLib {
static namespace = "myapp"
def applyLayout = { attrs, body ->
boolean mobileUser = false
[snip] some logic to determine if this is a mobile user or not goes here
if (mobileUser) {
attrs.name = "mobileLayout/${attrs.name}"
} else {
attrs.name = "desktopLayout/${attrs.name}"
}
out << g.applyLayout(attrs, body)
}
}
然后,您将拥有两个名为 someWebflowLayout 的布局文件 - 一个位于 /layouts/mobileLayout 中,一个位于 /layouts/desktopLayout 中(尽管我很欣赏这些可能与您现有的结构不完全匹配)
上面 taglib 中的代码只是一个粗略的指导,它需要支持来处理 g:applyLayout 采用的其他参数。