我想我理解MVC的基本概念 - 模型包含应用程序的数据和行为,View负责将其显示给用户,Controller负责处理用户输入.我不确定的是控制器中究竟是什么.
让我们说例如我有一个相当简单的应用程序(我专门考虑Java,但我认为相同的原则适用于其他地方).我将我的代码组织成3个叫做的包app.model
,app.view
和app.controller
.
在app.model
包中,我有一些反映应用程序实际行为的类.这些extends Observable
并使用setChanged()
和notifyObservers()
触发视图以在适当时更新.
该app.view
包具有一个类(或几个类用于不同类型的显示),它使用javax.swing
组件来处理显示.其中一些组件需要反馈到模型中.如果我理解正确,View不应该与反馈有任何关系 - 应该由Controller处理.
那么我实际上在Controller中放了什么?我public void actionPerformed(ActionEvent e)
只需要调用Controller中的方法,就可以将其放入View中吗?如果是这样,是否应在控制器中进行任何验证?如果是这样,我如何将错误消息反馈回View - 如果再次通过Model,或者Controller是否应该直接将其发送回View?
如果在视图中完成验证,我应该在Controller中添加什么?
很抱歉这个问题很长,我只想记录我对这个过程的理解,希望有人可以为我澄清这个问题!
我无法理解开源的使用权限.我在某地读到GPL或LGPL强制要求使用GPL软件的软件也必须是开源的.我想创建一个使用一些开源图像识别库的应用程序.我可以出售这个应用程序,还是必须是开源的?
谢谢!
当用户在Java中键入时,是否有一种从控制台读取单个字符的简单方法?可能吗?我尝试过这些方法但他们都在等待用户按下回车键:
char tmp = (char) System.in.read();
char tmp = (char) new InputStreamReader(System.in).read ();
char tmp = (char) System.console().reader().read(); // Java 6
Run Code Online (Sandbox Code Playgroud)
我开始认为System.in在按下enter之前不知道用户输入.
在我参与的许多项目中,我一直与LDAP保持联系,但事实是,我真的不明白它.我认为它只是一个人员目录,但在我发现它可以包含层次结构中的任何对象之后.
我在我的盒子里安装了openldap,我发现了许多关于安装的教程.
什么是LDAP?LDAP是正确选择的场景是什么?使用它时我应该知道哪些LDAP概念?LDAP的优点是什么?它只是因为旧的应用程序使用它吗?互联网上是否有一个好的文档解释所有这些问题?
更新:补充答案我发现此链接包含像我这样的LDAP新手的快速入门指南.
我正在审查log4net的一些代码,我遇到了这个.
private static readonly ILog logger = LogManager.GetLogger(typeof(AdminClient));
Run Code Online (Sandbox Code Playgroud)
我想知道为什么你需要私有静态只读.
从我的理解私有意味着变量不能在类外使用,除非有一个访问器方法或获取属性.
static意味着变量仅在此文件中作用域.
readonly意味着您只能从值中读取并且无法分配它.
所以,我在想那个编写这段代码的人.声明它是私有的,因为他们不希望它在类外使用和静态,因此不希望它在文件外部使用.但是,如果有一个get属性会静态阻止这种形式发生.
我想我只能理解readonly,而且只能读取和设置值.
非常感谢任何建议,
嘿,我想弄清楚[B @前缀在java中意味着什么. 当我尝试打印字节数组时它们出来了.但是,大小为32和大小为4的字节数组的长度相同.始终"[@ B1234567".
这是什么?此外,它们具有仅打印十六进制值的属性.我知道它不能只是二进制打印,因为会出现随机扩展的ascii字符.
下面是byte []到byte []哈希表映射打印的示例,其中映射由冒号分隔,这些是4字节键和32字节元素的字节数组.
[B@1ef9157:[B@1f82982
[B@181ed9e:[B@16d2633
[B@27e353:[B@e70e30
[B@cb6009:[B@154864a
[B@18aaa1e:[B@3c9217
[B@20be79:[B@9b42e6
[B@16925b0:[B@14520eb
[B@8ee016:[B@1742700
[B@1bfc93a:[B@acb158
[B@107ebe1:[B@1af33d6
[B@156b6b9:[B@17431b9
[B@139b78e:[B@16c79d7
[B@2e7820:[B@b33d0a
[B@82701e:[B@16c9867
[B@1f14ceb:[B@89cc5e
[B@da4b71:[B@c837cd
[B@ab853b:[B@c79809
[B@765a16:[B@1ce784b
[B@1319c:[B@3bc473
Run Code Online (Sandbox Code Playgroud) 我一直在查看Spring MVC教程并从那里复制了这个小的JSP代码:
<%@ page session="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>Training, Inc.</title></head>
<body>
<h2><c:out value="${message}" /></h2>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
有一个字符串设置为消息,而c:out标签只是按字面打印
$ {}消息
我想了一会儿,直到我记得我之前遇到的问题,并将taglib URI更改为:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
Run Code Online (Sandbox Code Playgroud)
这解决了我的小问题
前段时间我遇到了类似的XSLT转换问题,但在这种情况下,我不得不从http://java.sun.com/jstl/xml更改为http://java.sun.com/jsp/jstl/xml
根据这个链接,我的春天示例应该像我从spring教程粘贴时一样工作
问题是:你们中的任何人都知道这些taglib URI混淆的记录在哪里?为什么在某些情况下我从http://java.sun.com/jsp/jstl获得了最新版本,而在其他版本中我从http://java.sun.com/jstl获得了最新版本
我目前正在使用NHibernate.我有一种情况需要将一堆记录保存到数据库中,如下所示:
var relatedTopics = GetRelatedTopics(topic);
foreach (var relatedTopic in relatedTopics /* could be anywhere from 10 - 1000+ */)
{
var newRelatedTopic = new RelatedTopic { RelatedTopicUrl = relatedTopic, TopicUrl = topic.Name };
_repository.Save(newRelatedTopic);
}
Run Code Online (Sandbox Code Playgroud)
当有大量的记录需要保存时,这显然非常非常繁重,不得不多次访问数据库.什么是更好的方法?我可以做一些批量更新吗?我最好使用DataSet吗?
谢谢
是否有适用于OS X的小型免费C或C++编译器,如TCC?
Xcode不小,或像TCC,AFAIK一样简单.
我正在寻找类似GCC二进制文件或OS X TCC的东西.
我曾经使用过JSF,Spring MVC和Struts,我认为我在这些框架上取得了很好的成绩.最近我听说很多与我合作的优秀开发人员正在学习Grails并在他们的项目中使用它.
Grails比其他框架有什么实际优势?除了我知道其他框架之外,还值得学习吗?什么是Grails的嗡嗡声,是因为Groovy?
注意:我在SO中进行了研究,我发现的唯一相关问题是这个,并没有提到Grails