我开始学习JavaServer Faces(JSF).我正在使用GlassFish 3+.我刚刚在NetBeans中创建了一个新的JSF项目并运行该项目.它工作正常,但在检查XHTML输出时,我注意到XML声明留在了.这弄乱了DOCTYPE声明(它总是应该是文档中的第一个).

JSF应该删除XML声明,还是我做错了什么?
我一直在尝试使用C++,我遇到了一个我不知道如何解决的问题.
基本上,我发现你不能复制流(请参阅为什么不允许复制stringstream?),这也适用于"包装"它们的对象.例如:
这导致错误C2249:
'std :: basic_ios <_Elem,_Traits> :: operator =':虚拟基础'std :: basic_ios <_Elem,_Traits>'中声明的私有成员的无法访问路径
所以我的问题是:我怎样(最好是容易)复制具有*stream类型数据成员的对象?
完整示例代码:
#include <iostream>
#include <string>
#include <sstream>
class TestStream
{
public:
std::stringstream str;
};
int main()
{
TestStream test;
TestStream test2;
test = test2;
system("pause");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢.
UPDATE
感谢下面的答案,我设法解决了这个问题.我所做的是声明流对象一次,然后使用包装器对象中的指针(例如,TestStream)简单地引用它们.具有私有拷贝构造函数的所有其他对象也是如此.
首先,这是我的Shell排序代码(使用Java):
public char[] shellSort(char[] chars) {
int n = chars.length;
int increment = n / 2;
while(increment > 0) {
int last = increment;
while(last < n) {
int current = last - increment;
while(current >= 0) {
if(chars[current] > chars[current + increment]) {
//swap
char tmp = chars[current];
chars[current] = chars[current + increment];
chars[current + increment] = tmp;
current -= increment;
}
else { break; }
}
last++;
}
increment /= 2;
}
return chars;
}
Run Code Online (Sandbox Code Playgroud)
这是Shell排序的正确实现(暂时忘记最有效的间隙序列 - 例如,1,3,7,21 …
我听说很多应用程序开发人员在数据库处理的竞争条件方面遇到了一些麻烦.一个典型的例子是这样的:
在此示例中,numStock字段应该变为1,但由于用户之间的竞争而将其设置为2.
所以当然可以使用锁,但我想到了另一种处理方法 - 将所有行详细信息作为WHERE标准传递.让我解释...
在上面的示例中,SQL代码可能如下所示:
//选择
SELECT itemID, numStock FROM items WHERE itemID = 45
Run Code Online (Sandbox Code Playgroud)
//更新
UPDATE items SET numStock = 2 WHERE itemID = 45
Run Code Online (Sandbox Code Playgroud)
我想解决这个问题的想法:
//选择
SELECT itemID, numStock FROM items WHERE itemID = 45
Run Code Online (Sandbox Code Playgroud)
//更新
UPDATE items SET numStock = 2 WHERE itemID = 45 AND numStock = 3
Run Code Online (Sandbox Code Playgroud)
因此,查询检查数据是否因为选择了数据而发生了变化.所以我的问题是:(1)这[总是]会起作用吗?(2)与数据库锁定机制(例如,MySQL事务)相比,这是一个更好的选择吗?
谢谢你的时间.