日期:2014-05-20  浏览次数:20657 次

对于MVC实际使用中的一点疑惑,各位大神赐教
本人对MVC接触不久,对于控制器层控制返回特定的视图界面这个概念一直很模糊,个人使用MVC的时候有个习惯,就是喜欢将视图界面的代码直接封装在一个函数里,然后作为视图的一部分直接插入到控制器返回的视图中去
Java code

1.界面生成函数(HTMLTool.java)
public class HTMLTool{
    /*
    userinfoHTML方法直接将传进的数据结构封装成具体的视图代码    
    **/    
    public static String userinfoHTML(User user){ 
         return "<ul><li>姓名:"+user.getusername()+"</li><li>性别:"+user.getSex()"+</li><li>年龄:"+user.getAge()                +"</li></ul>";
    }
}



Java code

2.Action类(Action.java)
public class Action{
    public String userinfoHTML ;
    public String getUserinfoHTML(){return userinfoHTML ;}
    public String setUserinfoHTML(String userinfoHTML){this.userinfoHTML=userinfoHTML;}
    public String execute(){
        User user = new User("浮云","男",20) ;//此处省略了从数据模型层获取数据的过程
        setUserinfoHTML(HTMLTOOL.userinfoHTML(user)) ;//直接从界面生成函数中获取完整的视图代码块    
    }
}


Java code

3.具体视图(view.jsp)
<body>
    <h2>用户信息</h2>
    <s:property value="userinfoHTML" escape="false" /> /*把控制器返回的已经包装好的HTML代码直接插入进来*/
</body>


 

一直苦恼的是,这样的实现是不是有些不合适?


------解决方案--------------------
这个“界面生成函数(HTMLTool.java)”不太对头。

MVC中,并没有关于“界面生成函数”之类的东西,而且这样混淆了视图与控制器的职责,是不合理的,甚至可以说是忌讳的。

如果你真的需要这种“界面生成函数”之类的东西,建议可以用自定义TagLib的方式来做,相当于自行增强JSP视图的能力。
------解决方案--------------------
这样确实不合适,你还是在JSP中得到user的信息吧。
你这样变成只能用ul和li了,如果页面需要改版用DIV的话,你这个ul li放在哪里啊。
所以,只把数据传到视图就OK啦!
------解决方案--------------------
没有可用分啊,借大哥的贵宝地,回个帖得个分哈
------解决方案--------------------
使用TAGLIB,这样就MVC了,你在C里直接包了一个函数,直接破坏了MVC